gpt4 book ai didi

c# - Entity Framework : Running code before all migrations

转载 作者:行者123 更新时间:2023-11-30 15:28:35 25 4
gpt4 key购买 nike

我想迁移我的数据库中的存储过程和 View 。由于我总是迁移到最新版本,一种源代码控制友好的方法是在迁移过程中删除/重新创建所有过程/ View (使用这种方法,每个过程一个文件,而不是每个版本一个文件)。

由于旧的过程/函数/ View 可能与新的模式更改不兼容,我想在所有迁移之前先删除,然后再创建。

之前我使用的是自定义的 FluentMigrator,但现在我正在研究 Entity Framework Code First Migrations。我看到我可以使用 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...
}
}

这会将自定义初始化程序设置为自定义 AwesomeDatabaseInitializer,它继承自 MigrateDatabaseToLatestVersion。如果你想每次删除和重建数据库,你应该使用 DropCreateDatabaseAlways 作为基类,虽然我不确定这是否允许你运行迁移。

在初始化器中,您可以覆盖InitializeDatabase方法,您可以在调用base.InitializeDatabase之前运行代码,这将触发数据库初始化,进而迁移配置的 Seed 方法,AwesomeMigrationsConfiguration

这是使用 EF6。我不确定早期版本的 Entity Framework 中是否有等效项。

关于c# - Entity Framework : Running code before all migrations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com