1

これまで、Linq to Sqlを使用してMVC3を使用して、すべてのモデルが事前に生成され、データベースを自分で作成してから、テーブルをdbmlエディターに移動し、テーブルを変更する場合はエンティティを削除しました。エディターで、もう一度ドラッグします。それは完全にうまく機能しますが、MicrosoftがEFを頻繁に進めていることに気づきました。おそらく、それも学ぶ必要があります。

それで、いくつかの記事を読んだ後、私は完全に混乱しています。私が理解したように、開発者が最初にエンティティのモデルを作成し、次にモデルがデータベースを作成する、コードファーストアプローチから始めたいと思いました。ここで最も紛らわしいのは、モデルを変更するとき、および実行時にモデルをエンティティと比較しているときに、2つが同じでないと判断された場合、すべてのテーブルを削除して再作成することです。その場合、データを永続化するにはどうすればよいですか?すべてのテーブルを保存して、ドロップされないようにするにはどうすればよいですか?代わりに「データベースファースト」アプローチを使用する必要がありますか?

助けてください。ありがとう!

4

3 に答える 3

4

LinqToSqlの代わりにEntityFrameworkを見るのは完全に正しいです。マイクロソフトはEFに焦点を当てており、それがその方法です。EntityFrameworkには3つのオプションがあります。

  • データベースファースト
  • モデルファースト
  • コードファースト

最初にデータベースを使用すると、モデルの作成に使用する既存のデータベースができます。これは、モデルがどのように見えるか、およびエンティティとデータベース間のマッピングを変更できる場所を示すデザイナーで行われます。

モデルは最初に空のデザイナーから始まります。エンティティを作成してから、EntityFrameworkにそのデータベーススキーマを作成させます。

Code Firstを使用すると、デザイナーがいなくなります。代わりに、コードでエンティティを作成し、実行時にEntityFrameworkがエンティティからデータベースへのマッピングを作成します。これは、いくつかの規則(各エンティティを独自のテーブルに、Idプロパティを主キーとして使用するなど)と、追加できるカスタムマッピングによって行われます。

Linq To Sqlのバックグラウンドから、モデルファースト/データベースファーストはあなたにとって親しみやすいように聞こえるかもしれません。Code Firstは、純粋にPOCOであるクリーンなドメインモデルを作成したい人々にアピールする新しい方法です。それらはデータベースではなくコードに焦点を合わせています。

3つすべてを試すことができます。それらはすべて共通のベースといくつかの追加機能を備えています。

Code Firstには、データベースを作成するときに非常に多くのオプションがあります。ここでは、始めるのに役立ついくつかの情報を見つけることができます。データベースが毎回削除および再作成されていることがわかるのは、データベースイニシャライザーが原因です。データベースを作成、再作成、および更新するには、いくつかのオプションがあります。

開発環境では、モデルの変更ごとにデータベースを削除して作成するのがおそらく最も簡単です。データベースに初期テストデータをシードすることもできます。実稼働環境では、Code First Migrationsを使用して、モデルの変更ごとにデータベースを移行し、データが保持されるようにします。

于 2012-07-28T20:19:09.930 に答える
1

モデルがデータベースと一致しない場合、デフォルトで最初のコードは単に例外をスローします。「ドロップまたは再作成」初期化子(IDatabaseInitializer)を作成(および設定)したようです。これにより、データベースが強制的に再生成されます。さまざまなタイプの初期化子を作成できます。そのうちの1つはEF4.3.1の新機能であり、ドロップして再作成するのではなく、データベースを移行できます。

于 2012-07-28T20:03:26.357 に答える
1

2つが同じでないと判断した場合は、すべてのテーブルを削除して再作成します。

デフォルトでは、例外が発生します。データベースを削除して再作成するようにアプリケーションに明示的に指示する必要があります。私はEFコードの最初の経験がありません(最初はdbのみ)が、本番環境でデータベースを削除して再作成するのは好きではありません。開発中はこれで問題ありません。

データを永続化するにはどうすればよいですか?

コードファーストマイグレーションを使用します。

その他のリンク:

EF4.2コードファーストウォークスルー

EntityFrameworkホームページ

于 2012-07-28T19:57:55.523 に答える