EF backward compatible DB migrations

2019-06-18 07:12发布

问题:

I'm trying to figure out how to implement the following deployment scenario using EF code-first and migrations. The idea is that I would like to upgrade the DB with backward compatible schema changes (e.g.: add a column) and test that everything still works. It is inspired by green/blue deployment but it's not entirely following that pattern. The reasoning behind this is in following this process:

  1. Upgrade database (EF migration)
  2. Test website
  3. Update website code
  4. If something goes wrong, revert to the previous website code

The problem I will certainly face is that at step 2 (and 4) I will surely get an error from EF about the Model being changed, although all the DB changes are compatible with the existing code...

I know that a solution would be to migrate "Down" the database to the previous version (or even do a DB backup), but it may happen that some migrations are really complex and the "Down" part may be broken or simply poorly coded.

So my question is: is there a way to avoid EF checking the Model or eventually be aware that the changes are backward compatible?

回答1:

Setting the dbinitializer to null will drop the compability check, e.g.

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; }
}

Also suggested here