プロジェクト・NuGet
・ASP.NET Core Webアプリ(Model-View-Controller)を作成
・ファイル/フォルダ削除
Controllers/HomeControllers.cs
Views/Home/
削除
・NuGet インストール
ツール>NuGetパッケージマネージャ>ソリューションのNuGetパッケージの管理>参照
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Sqlite(SqlServer)
Microsoft.EntityFrameworkCore.Tools
あるいはパッケージマネージャーコンソールから
PM>Install-Package Microsoft.EntityFrameworkCore
PM>Install-Package Microsoft.EntityFrameworkCore.Sqlite(SqlServer)
PM>Install-Package Microsoft.EntityFrameworkCore.Tools
DB First・スキャフォールディング
DB(テーブル、フィールド)まで準備しておく。とりあえずなので最低限の内容。
・SQLiteの場合
SQLiteのファイルを作成しbin\Debug\net6.0以下に移動しておく。
PM>Scaffold-dbcontext -Connection “Data Source=./bin/Debug/net6.0/dat.sqlite” -Provider Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models
(更新の場合 -f)
・SQL Serverの場合
PM>Scaffold-dbcontext -Connection “Server=localhost,49153\SQLEXPRESS;Database=TestDb;persist security info=True;user id=sa;password=passw0rd!;MultipleActiveResultSets=True” -Provider Microsoft.EntityFrameworkCore.SqlServer -tables “TestTable33” -OutputDir Models
・コントローラー、ビュー作成
ソリューションエクスプローラ右クリック>追加>新規スキャフォールディングアイテム>EntityFrameworkを使用したビューがあるMVCコントローラー
表示されたダイアログで、
モデルクラス、データコンテキストクラスは自動生成されたファイルを選択。
コントローラー名は自動で命名されるが、用途に応じて変更する。
・Programs.cs編集
1 2 3 |
app.MapControllerRoute( name: "default", pattern: "{controller=Headers}/{action=Index}/{id?}"); |
の部分を必要に応じて書き換え。
1 2 3 4 5 6 7 |
using Microsoft.EntityFrameworkCore; ... builder.Services.AddDbContext<WebApplication1.Models.DatContext>(options => { options.UseSqlite("Data Source=" + Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\dat.sqlite"); }); |
を追加。
・xxxContext.cs編集
1 2 3 |
public DatContext() { } |
を削除。
1 |
protected override void OnConfiguring(DatContextOptionsBuilder optionsBuilder) |
を削除。
・DB更新
Modelsの内容を変更し、
PM>Add-Migration xxx
PM>Update-Database
ここではxxxContextなど自動で変更されない。
・アクションメソッド
アクションメソッドとは、コントローラーの中で定義されたpublicのメソッドのこと。アクションメソッドの戻値はIActionResultを実装したオブジェクト。
URLの基本は/コントローラー名/アクションメソッド名となる。
アクションメソッド
・アクションメソッドの戻り値
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class HelloController : Controller { public IActionResult Index() { // ViewResult View() // テンプレートをもとに出力 // ContentResult Content(string xxx) // 指定されたテキストを出力 // RedirectResult Redirect(string URL) // パスにリダイレクト // RedirectToActionResult RedirectToAction(string アクション名) // アクションにリダイレクト // FileContentResult File(byte[], xxx) // バイト配列をファイルとして出力 // NotFoundResult NotFound() // エラー出力 return Content("test"); } } |
・コントローラからビューの呼び出し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class HelloController : Controller { public IActionResult SayHello() { // ビュー変数の定義 ViewBag.Message = "Hello"; // ViewData["Message"] も可能 return View(); // 引数なしのView()は // Views/コントローラ名/アクション名.cshtml // 引数を渡すと // Views/コントローラ名/引数名.cshtml } } |
ヘッダーなどは/Views/Shared/_Layout.cshtmlにて定義され、コンテンツは@RenderBodyの部分で読み込まれる
Razor
インライン
@をつける、式の値を出力する。
コードブロック
@{}をつける、出力しない。
コードブロック内で出力する場合、
HTMLタグで囲む、または<text>タグで囲む、または@:をつける。
コメント
@* *@
@{ }の中では、// や /* */が使える。
@のエスケープ
@をつける。