6

で簡単な移行を設定しましたAutomaticMigrationsEnabled = false。Visual Studio から、または .NET を使用すると、すべてがうまく機能しMigrateDatabaseToLatestVersionます。

しかし、これは私にとって理想的ではありません。ci サーバーで展開スクリプトから移行を実行したいと考えています。migrate.exe を使用してこれを行う方法を説明しているこの記事を見つけましたが、これは常にシードを実行しているようです。これは、適用する移行がない場合でも同様です。

移行が実行されたかどうかを Seed メソッド内でプログラムで確認する必要がありますか? どうすればいいですか?

4

1 に答える 1

5

保留中の移行がある場合にのみ、DbMigratorを使用して Update() を手動で実行します。Entity Framework 5.0 で導入されました。

private void MigrateAndSeedDbIfSchemaIsOutdated()
{
    // Disable initializer.
    Database.SetInitializer<MyContext>(null);

    // Make sure database exists.
    using (var db = new MyContext())
    {
        db.Database.Initialize(false);
    }

    var migrator = new DbMigrator(new MyConfiguration());

    if (migrator.GetPendingMigrations().Any())
    {
        // Run migrations and seed.
        migrator.Update();
    }
}
于 2013-05-20T20:16:11.603 に答える