Entity framework EF代码优先-多个应用程序版本共享一个数据库

Entity framework EF代码优先-多个应用程序版本共享一个数据库,entity-framework,deployment,ef-code-first,entity-framework-6,Entity Framework,Deployment,Ef Code First,Entity Framework 6,我们在EF6中首先使用代码开发了一个应用程序。这在我们的实时基础设施上运行得非常愉快 我最近做了一些更改,需要对模式进行一些更改,并生成了相应的迁移 由于应用程序最初是部署的,我们的实时环境发布流程已经改变,所有应用程序都部署到了一个预备区域,因此我们可以验证与其他应用程序/服务的交互,并在将应用程序文件发布到其实时位置之前运行测试 问题是,当应用程序在Prelive中运行时,迁移将改变数据库模式,并且应用程序的实时版本将因其模型兼容性检查而阻塞 其他人是如何处理这个问题的 是否有任何方法可以安

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

我最近做了一些更改,需要对模式进行一些更改,并生成了相应的迁移

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

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

其他人是如何处理这个问题的

是否有任何方法可以安全地针对同一数据库运行多个版本的代码优先应用程序


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

我面临同样的问题。像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();
}

你找到正确的方法了吗?到目前为止,我只添加了Database.SetInitializer(null);指向上下文构造函数以在将来禁用兼容性检查。我不确定这是不是正确的方法。