ユーザ用ツール

サイト用ツール


サイドバー

mvc:スキャフォールディング

以前のリビジョンの文書です


スキャフォールディングの手順

ムービー ページのスキャフォールディング

  1. 記号付きリスト
  2. Modelの作成
  3. NuGet パッケージを追加する
    1. Install-Package Microsoft.EntityFrameworkCore.Design
    2. Install-Package Microsoft.EntityFrameworkCore.SqlServer
  4. Controllerフォルダを右クリックでスキャフォールディング
  5. アプリのビルド
    1. プロジェクトファイルから<Nullable>enable</Nullable> を削除
  6. DBの以降
    1. Add-Migration InitialCreate
    2. Update-Database
  7. アプリの実行

SeedDataの登録

テスト データで DB を初期化する

データベースのシード

  1. SeedDataフォルダーを作成しSeedData.csという名前の新しいクラスを作成。
  2. 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となる。
Display ICollection in View

手動でコンテキストがICollcetionを読み込むのを待つように指示してやる。

コントローラーを以下のように変更する。

Controller
        public async Task<IActionResult> Index()
        {
              return View(await _context.Article.ToListAsync());
        }

 ↓

Controller
        public async Task<IActionResult> Index()
        {
              return View(await _context.Article.Include(a => a.Comments).ToListAsync());
        }

ビューでICollectionの関連データも読み取りれるようになる。

View
                @foreach (var item_com in item.Comments)
                {
                        <td>
                            @Html.DisplayFor(modelItem => item_com.Body)
                        </td>
                }

部分ビュー

親ビューに下記コードを埋め込むとよびだせる。

~\Views\Shared\_PartialViewName.cshtml

<partial name="_PartialViewName" />

↓でも同じ

@await Html.PartialAsync("_CurrentTimePartial")
mvc/スキャフォールディング.1660267069.txt.gz · 最終更新: 2022/08/12 10:17 by ips