この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
mvc:スキャフォールディング [2022/08/12 10:17] ips [SeedDataの登録] |
— (現在) | ||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== スキャフォールディングの手順 ====== | ||
- | [[https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-6.0&tabs=visual-studio|ムービー ページのスキャフォールディング]] | ||
- | |||
- | |||
- | - 記号付きリスト | ||
- | - Modelの作成 | ||
- | - NuGet パッケージを追加する | ||
- | - Install-Package Microsoft.EntityFrameworkCore.Design | ||
- | - Install-Package Microsoft.EntityFrameworkCore.SqlServer | ||
- | - Controllerフォルダを右クリックでスキャフォールディング | ||
- | - アプリのビルド | ||
- | - プロジェクトファイルから<html><Nullable>enable</Nullable></html> を削除 | ||
- | - DBの以降 | ||
- | - Add-Migration InitialCreate | ||
- | - Update-Database | ||
- | - アプリの実行 | ||
- | |||
- | |||
- | ====== SeedDataの登録 ====== | ||
- | |||
- | [[https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application#initialize-db-with-test-data|テスト データで DB を初期化する]] | ||
- | |||
- | [[https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/working-with-sql?view=aspnetcore-6.0&tabs=visual-studio#seed-the-database|データベースのシード]] | ||
- | |||
- | - SeedDataフォルダーを作成しSeedData.csという名前の新しいクラスを作成。 | ||
- | - Program.csに処理追加 | ||
- | |||
- | ====== 選択したコードジェネレーターを実行中にエラーが発生しました ====== | ||
- | |||
- | リビルドしても復旧せず。 | ||
- | パッケージを更新したらできるようになった。 | ||
- | |||
- | |||
- | ====== 外部キーをつけてもデータが表示されない ====== | ||
- | |||
- | |||
- | https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application | ||
- | |||
- | https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application | ||
- | |||
- | 解決方法は↓。 | ||
- | virtual ICollectionのため遅延バインディングとなっている。 | ||
- | そのためスキャフォールディングしたままだとICllectionはnullとなる。 | ||
- | [[https://stackoverflow.com/questions/53194666/display-icollection-in-view|Display ICollection in View]] | ||
- | |||
- | 手動でコンテキストがICollcetionを読み込むのを待つように指示してやる。 | ||
- | |||
- | コントローラーを以下のように変更する。 | ||
- | <code c# Controller> | ||
- | public async Task<IActionResult> Index() | ||
- | { | ||
- | return View(await _context.Article.ToListAsync()); | ||
- | } | ||
- | </code> | ||
- | ↓ | ||
- | <code c# Controller> | ||
- | public async Task<IActionResult> Index() | ||
- | { | ||
- | return View(await _context.Article.Include(a => a.Comments).ToListAsync()); | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | ビューでICollectionの関連データも読み取りれるようになる。 | ||
- | <code c# View> | ||
- | @foreach (var item_com in item.Comments) | ||
- | { | ||
- | <td> | ||
- | @Html.DisplayFor(modelItem => item_com.Body) | ||
- | </td> | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | ====== 部分ビュー ====== | ||
- | |||
- | 親ビューに下記コードを埋め込むとよびだせる。 | ||
- | |||
- | ~\Views\Shared\_PartialViewName.cshtml | ||
- | <code> | ||
- | <partial name="_PartialViewName" /> | ||
- | </code> | ||
- | |||
- | ↓でも同じ | ||
- | <code> | ||
- | @await Html.PartialAsync("_CurrentTimePartial") | ||
- | </code> |