9

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

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

是否可以关闭上下文的元数据验证,并让第二个上下文按原样对表工作,因为我知道这有效?

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

4

1 回答 1

11

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

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);
于 2013-03-26T05:25:21.320 回答