EF向后兼容的数据库迁移

Tal*_*ris 6 c# asp.net-mvc entity-framework ef-migrations

我正在尝试使用EF代码优先和迁移来弄清楚如何实现以下部署方案.我的想法是,我想用向后兼容的架构更改升级数据库(例如:添加一列)并测试一切仍然有效.它的灵感来自绿色/蓝色部署,但并不完全遵循这种模式.这背后的原因是遵循这个过程:

  1. 升级数据库(EF迁移)
  2. 测试网站
  3. 更新网站代码
  4. 如果出现问题,请恢复到之前的网站代码

我肯定会面临的问题是,在第2步(和第4步),我肯定会从EF获得关于模型被更改的错误,尽管所有数据库更改都与现有代码兼容...

我知道解决方案是将数据库"向下"迁移到以前的版本(甚至进行数据库备份),但可能会发生某些迁移非常复杂且"向下"部分可能被破坏或者编码很差.

所以我的问题是:有没有办法避免EF检查模型或最终意识到更改是向后兼容的?

小智 4

将 dinitializer 设置为 null 将放弃兼容性检查,例如

public class MyDBContext: DbContext 
{
    public MyDBContext() : base("myConnString")
    {            
        //Disable initializer
        Database.SetInitializer<MyDBContext>(null);
    }
    public DbSet<A> As { get; set; }
    public DbSet<B> Bs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这里也推荐