2

Edmx ファイルを使用せずにコード ファーストのアプローチを使用しています。最初にデータベースを作成するのに問題なく実行されます。

しかし、データベース コンテキストに新しいクラスという新しいデータ エンティティを追加する場合、そのデータベースの新しいテーブルにそれを追加することはできません。

たとえば、最初にデータベースに 2 つのテーブルがあるとします。ex データベース : DbTest

表 : Tbl1、Tbl2

ここで、クラス名「Tbl3」などの新しいテーブルを追加すると、既存のデータベースに追加されます。

コードファーストアプローチでどのように実現できるか例を挙げて説明してもらえますか?

私は次のような言及を見てきました Database.SetInitializer(new ........)

上記のコンストラクターの空白領域には何を入れる必要がありますか?

4

1 に答える 1

1

データベースを見ると、データベースが作成されてからモデルに変更が加えられたかどうかを判断するために Entity Framework が使用する「EdmMetadata」というテーブルが表示されます (これはあなたの場合です)。

デフォルトの動作では、モデルとデータベースが異なる場合に例外がスローされます。異なる動作を取得するには、IDatabaseInitializer<TContext>.

幸いなことに、Entity Framework には、このインターフェイスの既定の実装がいくつか付属しています。

  • CreateDatabaseIfNotExists<TContext>- データベースがまだ存在しない場合は、データベースが作成されます。
  • DropCreateDatabaseAlways<TContext>- これにより、アプリケーションが実行されるたびにデータベースが再作成されます。
  • DropCreateDatabaseIfModelChanges<TContext>- これにより、EdmMetadata テーブルで変更が検出された場合 (通常は新しいテーブルを作成した結果として)、データベースが再作成されます。

もちろん、メソッドをオーバーライドして、このインターフェイスの独自の実装を作成することもできますInitializeDatabase

これらの初期化戦略の 1 つを使用する例を以下に示します。

Database.SetInitializer(
    new DropCreateDatabaseIfModelChanges<NameOfYourDbContextClass>())

データベースにすでに入力されているデータが失われる可能性があるため、初期化戦略を選択する前に慎重に検討してください。

Entity Framework によって提供される実装はSeed、データベースを作成するたびに既定のデータを事前に読み込むことができるように、データベースにデータを読み込む方法を提供します。

この記事では、さらに詳しい情報を提供します。

于 2012-09-23T22:20:13.423 に答える