Entity Framework
データベース初期化子
サーチ…
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