【问题标题】:Possible to have DbContext Ignore Migration/Version data in Database?数据库中可能有 DbContext Ignore Migration/Version 数据吗?
【发布时间】:2013-03-26 04:24:55
【问题描述】:

我有一个应用程序使用存储在单个数据库中的两个独立模型。第一个模型设置了迁移,并且是在数据库中创建迁移数据的模型。第二个是一个非常简单的模型,根本不需要模型验证 - 它使用的表存在并且具有适当的结构。第二个上下文在具有相同表结构的单独数据库中工作正常。

问题是在与第一个模型相同的数据库中运行时它会失败,因为它确实提供了某种模型验证。它抱怨自上次更新以来上下文已更改,但迁移数据当然不包含有关第二个上下文表的任何内容。

是否可以关闭上下文的元数据验证,让第二个上下文按原样处理表,因为我知道这样可以?

在上下文构造函数中,但没有效果。

【问题讨论】:

  • 我想我明白你想要做什么。你在使用 DBInitializer 吗?
  • Configuration.AutoDetectChangesEnabled = false;禁用有时出于性能原因需要的实体上的更改跟踪。见blog.oneunicorn.com/2012/03/11/…

标签: entity-framework ef-code-first


【解决方案1】:

解决方案是使用实现一个“什么都不做”的数据库初始化程序,它基本上什么都不做。

public class QueueMessageManagerContextInitializer : IDatabaseInitializer<QueueMessageManagerContext>
{
    protected void Seed(QueueMessageManagerContext context)
    {            
    }

    public void InitializeDatabase(QueueMessageManagerContext context)
    {
        // do nothing
        Seed(context);
    }
}

使用一次启动代码然后:

    [ClassInitialize()]
     public static void MyClassInitialize(TestContext testContext) 
    {
        //Database.SetInitializer<QueueMessageManagerContext>(new DropCreateDatabaseIfModelChanges<QueueMessageManagerContext>());
        Database.SetInitializer<QueueMessageManagerContext>(new QueueMessageManagerContextInitializer());
    }

简单但不明显的解决方案。

编辑:

更简单的解决方案:只需将 NULL 传递给 SetInitializer() 方法:

Database.SetInitializer<QueueMessageManagerContext>(null);

【讨论】:

  • 该死的打败我了 :) 不错!
  • 如果您发现这没有按预期工作,请检查配置文件的 EF 部分。确保您的上下文具有 disableDatabaseInitialization="true"。我为此浪费了太多时间,没有人在他们的回答中提到它。关于这个设置的更多信息可以在msdn.microsoft.com/en-us/data/jj556606底部找到
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 2019-08-28
相关资源
最近更新 更多