【发布时间】:2019-07-29 12:07:53
【问题描述】:
我们在应用程序中使用实体框架 6,以及在生成迁移时处理一些边缘情况的自定义 Sql Server 迁移生成器。
我们使用 add-migration 向系统添加新的迁移,然后在部署应用程序时,我们的部署工具运行 migrate.exe 以使用任何待处理的迁移更新目标数据库。
但是,我们发现迁移会自动应用到我们在运行应用程序时碰巧连接到的任何数据库。这对我们的应用程序来说是非常不受欢迎的行为。如果应用程序模型与其尝试连接的数据库不匹配,我们希望它无法工作。
我相信这是因为我们使用了以下内容:
// Supply configuration reference to Initializer
Database.SetInitializer(new MigrateDatabaseToLatestVersion<OurContext, OurDb.Migrations.Configuration>(useSuppliedContext: true));
我可以删除它并用不同的初始化程序(例如 CreateDatabaseIfNotExists)替换它,但随后不会使用配置,因为构造函数没有用于配置的参数:
// No opportunity to supply configuration?
Database.SetInitializer<OurDb>(new CreateDatabaseIfNotExists<OurDb>());
所以我的问题是,如何在禁用自动迁移的同时保留自定义 sql 生成器?
这是我们的 Configuration.cs 类的一部分:
internal sealed class Configuration : DbMigrationsConfiguration<OurDb>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
SetSqlGenerator("System.Data.SqlClient", new CustomSqlServerMigrationSqlGenerator());
}
protected override void Seed(OurDb context)
{
//
}
}
【问题讨论】:
标签: c# entity-framework-6 ef-code-first