“支持'ApplicationDbContext'上下文的模型已经改变了” - 如何忽略?

时间:2016-08-09 14:39:30

标签: entity-framework ef-code-first dbcontext ef-migrations

我回答了有关无缝更新的问题:

Seamless EF Migrations from Staging > Production with Schema Change

我认为实现此目的的一种简单方法是简单地抑制错误The model backing the 'ApplicationDbContext' context has changed - 这样我就可以

  1. 将我的应用发布到临时插槽
  2. 针对登台数据库测试迁移
  3. 交换分期/制作
  4. 直接迁移到Prod
  5. 这就是我现在所做的,但是在34之间,dbContext会在几秒钟内抛出该错误。如果我可以简单地抑制那个错误......我们可以在几秒钟内消除95%的错误(5%是我们从漂移的模型中捕获的错误)。

    有没有办法抑制此错误,但是是否启用了迁移?

    更新

    使用链接here我可以测试以下内容:

        public ApplicationContext()
            : base("name=DefaultConnection") {
            this.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
            Database.SetInitializer(new SuppressedInitializer<ApplicationContext>());
        }
    
    
    public class SuppressedInitializer<TContext> : IDatabaseInitializer<TContext>
    where TContext : DbContext {
        public void InitializeDatabase(TContext context) {
            if (!context.Database.Exists()) {
                throw new ConfigurationException(
                  "Database does not exist");
            }
            else {
                if (!context.Database.CompatibleWithModel(true)) {
                    var contextException = new InvalidOperationException("The database is not compatible with the entity model.");
                    Elmah.ErrorSignal.FromCurrentContext().Raise(contextException);
                    // intentionally don't throw so that the application may continue
                }
            }
        }
    }
    

    contextException是在我预期的时候创建的,我相信这是一个解决方案。

0 个答案:

没有答案