2つの最も重要なヒント:
[1]-新しいscaffoldコマンドを実行する前に、プロジェクトが完全にビルドされていることを確認してください。
そうでなければ...
- コードの行を書き始めます。
- 必要なDB列がモデルにないことに気付くでしょう。
- あなたはそれを足場にしようとするでしょう。
- 20分後、ビルド(およびscaffoldコマンド)が失敗する理由は、文字通り半分のコード行があるためであることがわかります。おっと!
[2]-ソース管理にチェックインするか、コピーを作成します。
- 何が変更されたかを簡単に確認できます。
- 必要に応じてロールバックを許可します。
運が悪かったり、間違えたりすると、非常に厄介な「鶏が先か卵が先か」の問題が発生する可能性があります。
その他の問題:
複数のDLLがある場合は、間違ったプロジェクトを生成していないことを確認してください。「ビルドに失敗しました」というメッセージはさまざまな理由で発生する可能性がありますが、足場を組んでいるプロジェクトにEFCoreがインストールされていない場合が最も愚かです。
パッケージマネージャーコンソールにはDefault project
ドロップダウンがあり、予想される変更がない場合は、おそらくここに新しいファイルが表示されます。
ドロップダウンを設定することを忘れないよりも良い解決策は-Project
、scaffoldコマンドにスイッチを追加することです。
これは私が使用する完全なコマンドです:
EFコア2の場合
Scaffold-DbContext -Connection "Server =(local); Database = DefenderRRCart; Integrated Security = True; Trusted_Connection = True;" -プロバイダーMicrosoft.EntityFrameworkCore.SqlServer-OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess -force
EFコア3の場合
dotnet efdbcontextscaffold "Server = tcp:XXXXX.database.windows.net、1433; Initial Catalog = DATABASE_NAME; Persist Security Info = False; User ID = USERNAME; Password = PASSWORD; MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False ;接続タイムアウト= 30; " Microsoft.EntityFrameworkCore.SqlServer -o DB.Models --context-dir DB.Contexts --context RRDBContext --project RR.EF.csproj --force --use-database-names
注:-forceはファイルを上書きしますが、存在しなくなったファイルは削除しません。DBからテーブルを削除する場合は、古いエンティティファイルを自分で削除する必要があります(エクスプローラーで日付で並べ替えて、古いエンティティファイルを削除するだけです)。
完全な足場のリファレンス:
EFコア2:
https://docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext(この
EFコア3:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet