EF Code First - 共享数据库的多个应用程序版本

时间:2015-06-10 13:08:41

标签: entity-framework deployment ef-code-first entity-framework-6

我们首先在EF6中使用代码开发了一个应用程序。这在我们的现场基础设施上非常愉快。

我最近做了一些更改,需要进行一些架构更改,并且我已经生成了适当的迁移。

由于最初部署了应用程序,我们的实时环境发布过程已经发生变化,所有应用程序都部署到Prelive区域,因此我们可以验证与其他应用程序/服务的交互,并在应用程序文件发布到实时之前运行测试位置。

问题是,当应用程序在Prelive中运行时,迁移将改变数据库架构,并且应用程序的实时版本将阻止其模型兼容性检查。

其他人如何处理此问题?

有没有办法在同一个数据库中安全地运行多个版本的代码第一个应用程序?

如果我可以禁用模型检查,那么迁移仍会在应用程序首次启动时运行,还是我必须返回生成sql更改脚本并手动运行它们?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。像Nick一样,我在DbContext中禁用了迁移,并为数据库迁移创建了一个不同的项目。然后我在MigratorCode中添加了以下检查,以便它只升级而不会降级,而不是直接调用migrator.Update()。

migrationConfiguration.TargetDatabase = new DbConnectionInfo(MigrationContext.EnvironmentSettings.ConnectionString, "System.Data.SqlClient");
var migrator = new DbMigrator(migrationConfiguration);
var localMigrations = migrator.GetLocalMigrations();
var dbMigrations = migrator.GetDatabaseMigrations();

if (localMigrations.Except(dbMigrations).Any())
{
    migrator.Update();
}