web-dev-qa-db-ja.com

データベースファーストアプローチを使用しているときにモデルを更新する方法

最初にEntityFramework Coreデータベースを使用してモデルを作成しました EF Coreドキュメントで説明されているように

しかし、データベースが編集されたときにモデルを更新する方法がわかりません。

39
witson

最初に-Forceオプションを追加して実行したコマンドを実行することにより、モデルの再足場を作成できます。その結果、指定されたフォルダーの内容が上書きされます。パッケージマネージャーコンソール EF Coreドキュメントの例 を使用すると、変更されたコマンドは次のようになります。

Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force

あるいは、 CLIコマンド を使用している場合、次のようになります。

dotnet ef dbcontext scaffold "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f

ただし、モデルとデータベーススキーマを相互に同期させるには、移行の使用を検討する必要があります。そのようにして、モデルに変更を加えてから、それらをデータベースに伝播します。

61
Mike Brind

追加のヒント

モデルを時々更新する場合は、プロセスを簡素化する便利な方法があります。

メニューに移動しますツール> 外部ツール、そして追加新しいメニューで、以下のエントリを入力します:


タイトル

Update DbContext

コマンド

dotnet.exe

引数

ef dbcontext scaffold "your-connection-string" Microsoft.EntityFrameworkCore.SqlServer --output-dir=Models --force

初期ディレクトリ

$(ProjectDir)

次に、オプションで「出力ウィンドウを使用」にチェックマークを付け、ApplyおよびOKを押します。

もう一度Toolsに移動すると、ボタンをクリックするだけで、この新しいメニューがそこにあり、再利用の準備ができているはずです!

16
Yom S.

移行を行う必要があります。スキャフォールドしないでください。さもないと、データ検証など、モデルで行われた作業が失われます。

1
JD Patton

dbcontextクラスでカスタマイズしている場合E.g。LoggerFactoryを追加し、('Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force')を使用した後。このコマンドは、すべてのカスタマイズ変更が失われます。

0
user2890634