2

私は、サービスレイヤ、POCO、およびリポジトリレイヤ用に別々のクラスライブラリを持つコードMVCアプリケーションを作成しています。リポジトリ層には、IRepositoryクラス、DbContext、およびEntity Frameworkへの必要な参照のEF実装があります。私のMVCプロジェクトはEFを参照していません。MVCプロジェクト外の再作成とシードデータベース

モデルが変更された後にデータベースが再作成され、シードされるようにソリューションを設定する方法はありますか?私がこれまでに見たすべての例は、MVCプロジェクトのGlobal.asaxファイルでこれを初期化していますが、MVCプロジェクトはEFに依存せず、DbContextにアクセスできません。

あなたのコンテキストの静的コンストラクタで初期化子を登録することができ

答えて

1

public class MyInitializer : DropCreateDatabaseIfModelChanges<MyContext> 
{ 
    protected override void Seed(MyContext context) 
    { 
     // ... 
    } 
} 

静的コンストラクタは次のようになります。同様にあなたのリポジトリの実装ライブラリにある派生初期化子を使用して

public class MyContext : DbContext 
{ 
    static MyContext() 
    { 
     Database.SetInitializer(new MyInitializer()); 
    } 

    //... 
} 

最初のコンテキストインスタンスの作成時に実行され、クエリを実行したり、初めてコンテキストにエンティティを追加したり、コンテキストにエンティティを追加したりするときにSeedが呼び出されます。

+0

華麗で、まさに私が望んでいたことです。ありがとう。 – James

関連する問題