サーチ…


CreateDatabaseIfNotExists

実装IDatabaseInitializerデフォルトでEntityFrameworkで使用されています。名前が示すように、存在しない場合はデータベースを作成します。ただし、モデルを変更すると例外がスローされます。

使用法:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
    }
}

DropCreateDatabaseIfModelChanges

このIDatabaseInitializer実装は、モデルが自動的に変更された場合にデータベースを削除して再作成します。

使用法:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
    }
}

DropCreateDatabaseAlways

このIDatabaseInitializer実装は、アプリケーションappドメインでコンテキストが使用されるIDatabaseInitializerデータベースを削除して再作成します。データベースが再作成されているという事実によるデータの損失に注意してください。

使用法:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());
    }
}

カスタムデータベース初期化子

IDatabaseInitializer独自の実装を作成できます。

イニシャライザの実装例。データベースを0に移行し、最新の移行に移行します(統合テストを実行する場合などに便利です)。これを行うには、 DbMigrationsConfiguration型も必要です。

public class RecreateFromScratch<TContext, TMigrationsConfiguration> : 
IDatabaseInitializer<TContext>
where TContext : DbContext
where TMigrationsConfiguration : DbMigrationsConfiguration<TContext>, new()
{
    private readonly DbMigrationsConfiguration<TContext> _configuration;

    public RecreateFromScratch()
    {
        _configuration = new TMigrationsConfiguration();
    }

    public void InitializeDatabase(TContext context)
    {
        var migrator = new DbMigrator(_configuration);
        migrator.Update("0");
        migrator.Update();
    }
}

MigrateDatabaseToLatestVersion

コードファーストマイグレーションを使用してデータベースを最新バージョンに更新するIDatabaseInitializerの実装。このイニシャライザを使用するには、 DbMigrationsConfiguration型も使用する必要があります。

使用法:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(
            new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow