And*_*kin 5 .net c# entity-framework database-migration entity-framework-migrations
我想迁移数据库中的存储过程和视图。由于我总是迁移到最新版本,因此一种源代码控制友好的方法是在迁移过程中删除/重新创建所有过程/视图(使用这种方法,每个过程有一个文件,而不是每个版本一个)。
由于旧的过程/函数/视图可能与新的架构更改不兼容,我想在所有迁移之前进行删除,然后再进行创建。
以前我使用了定制的 FluentMigrator,但现在我正在研究实体框架代码优先迁移。我看到我可以用来Seed
在所有迁移后始终运行代码。
有什么我可以用来在所有迁移之前始终运行代码的东西吗?
如果您希望在迁移开始之前运行一些代码,您可以指定自定义数据库初始值设定项:
public class AwesomeEntity
{
public int Id { get; set; }
}
public class AwesomeDbContext : DbContext
{
static AwesomeDbContext()
{
Database.SetInitializer(new AwesomeDatabaseInitializer());
}
public IDbSet<AwesomeEntity> Entities { get; set; }
}
public class AwesomeDatabaseInitializer : MigrateDatabaseToLatestVersion<AwesomeDbContext, AwesomeMigrationsConfiguration>
{
public override void InitializeDatabase(AwesomeDbContext context)
{
// TODO: Run code before migration here...
base.InitializeDatabase(context);
}
}
public class AwesomeMigrationsConfiguration : DbMigrationsConfiguration<AwesomeDbContext>
{
public AwesomeMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(AwesomeDbContext context)
{
// TODO: Seed database here...
}
}
Run Code Online (Sandbox Code Playgroud)
这将自定义初始值设定项设置为自定义AwesomeDatabaseInitializer
,它继承自MigrateDatabaseToLatestVersion
. 如果您想每次删除并重建数据库,则应该使用 作为DropCreateDatabaseAlways
基类,尽管我不确定这是否允许您运行迁移。
在初始化程序中,您可以重写该InitializeDatabase
方法,您可以在调用之前运行代码base.InitializeDatabase
,这将触发数据库初始化,进而触发Seed
迁移配置的方法AwesomeMigrationsConfiguration
。
这是使用 EF6。我不确定实体框架的早期版本中是否有等效项。
归档时间: |
|
查看次数: |
1524 次 |
最近记录: |