この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
mvc:スキャフォールディング [2022/08/12 11:13] ips [外部キーをつけてもデータが表示されない] |
— (現在) | ||
|---|---|---|---|
| ライン 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\ControllerName\ParantView.cshtml | ||
| - | 部分ビュー:Views\Shared\_PartialViewName.cshtml | ||
| - | |||
| - | <code c# ParantView.cshtml> | ||
| - | <partial name="_PartialViewName" /> | ||
| - | </code> | ||
| - | |||
| - | ↓でも同じ | ||
| - | <code c# ParantView.cshtml> | ||
| - | @await Html.PartialAsync("_PartialViewName") | ||
| - | </code> | ||