4

私は Code First を理解しようとしていますが、これまでモデルに変更を加えるたびに、データベースを削除して再作成する必要があります。現在データベースにあるデータはどうですか? 毎回これを行わなければならず、テーブルに新しい列を追加するなどの変更を行う必要がないことを 100% 確信していない限り、良い Web アプローチにはなりません。これが起こらないようにする別の方法はありますか?

4

2 に答える 2

1

開発中にテスト データを維持しようとしている場合は、IDatabaseInitializer (つまり、データベース初期化子) の Seed メソッドの使用を検討してください。Seed メソッドは、初期化中 (モデルの変更が適用された後) に呼び出され、指定したテスト データを入力します。

EF で使用するイニシャライザーを指定する最善の方法は、global.asax.cs ファイルです。

次に例を示します。

[グローバル.asax.cs]

Database.SetInitializer<MyApplicationDbContext>(new MyApplicationDbContextInitializer());

[MyApplicationDbContextInitializer.cs]

public class MyApplicationDbContextInitializer : DropCreateDatabaseAlways<MyApplicationDbContext>
{
    protected override void Seed(TitleDB context)
    {

        context.Products.Add(new Product { Id = 1, Name = "Foobar XL" });
        context.Products.Add(new Product { Id = 2, Name = "Foobar LG" });
        context.Products.Add(new Product { Id = 3, Name = "Foobar MD" });

        context.SaveChanges();

        base.Seed(context);
    }
}
于 2012-06-13T17:36:10.953 に答える
1

デフォルトでは、データベース初期化子は DropCreateDatabaseIfModelChnages に設定されています。データベース初期化子を null に設定して、再作成を避けることができます。

Database.SetInitializer<YourContext>(null);

もう 1 つのオプションは、データベースの移行を使用して、データベースを再作成せずに更新することです。

于 2012-06-05T15:35:15.807 に答える