私はEntityFrameworkでモデルファーストアプローチを研究しています。モデルからデータベースが再生成されるたびに、すべてのデータが消去されることがわかりました。モデルファーストは本当に便利なアプローチですか、それともこれを修正する方法がありますか
4 に答える
Model first は、データを自動的に削除しません。データベース作成用の SQL スクリプトを作成し、それを実行すると、おそらくすべてのテーブルが削除されますが、スクリプトを手動で変更するか、データベース アップグレード用の高度なツールを使用できます。
- データベース生成パワー パック(VS 2010 Premium または Ultimate が必要)
- Huagati EDMX ツール(商用ツール)
Entity Frameworkはデータベースを削除し、最初から再作成します。それはまさにそれが機能する方法です。Microsoftは、変更を移行できる移行戦略に取り組んでいますが、次のメジャーバージョンまで準備はできていません。
この問題を解決しようとするサードパーティのツールがいくつかありますが、私はそれらにあまり依存していません。
モデルを更新して自動生成された SQL スクリプトを実行するたびに、データベースを手動でシードしてデータを取り戻すことができます。モデル ファーストではシード処理がコード ファーストと同じように機能しないため、よく話題に上る便利な DropAndCreateDatabaseIfModelChanges アプローチはうまく機能しません。最も簡単な回避策は、自分自身を初期化して手動でシードすることです。
var db = new MyDbContext();
db.Database.Initialize(true);
この問題に対処する方法の 1 つは、データをシードすることです。つまり、EF がデータベースを作成した後に、いくつかのテスト データをデータベースに入力します。http://binuity.com/blog/2011/03/28/ef4-seeding-data-on-each-dropcreatedatabaseifmodelchanges/を参照してください。
さらに別の方法は、データベースを再作成するのではなく、データベースを更新しようとするツールを用意することです。