1

我在 Code First EF 中使用微风。我的生产 DbContext 具有 IDatabaseInitializer,如果!context.Database.CompatibleWithModel(true). 如果我创建了文档中建议的上下文,则无法检查数据库兼容性。

// The following line will throw NotSupportedException.
// Unable to verify the compatibility of the model because
// the DbContext instance was not created using Code First patterns.
var context2 = new MyDbContext(EntityConnection, false);    // create a DbContext using the existing connection

我应该如何实例化提供 ContextProvider 的 EntityConnection 的 DbContexts?

4

1 回答 1

2

在 期间SaveChanges,Breeze使用默认构造函数EFContextProvider创建一个DbContext实例。这发生在BeforeSaveEntity()和之前BeforeSaveEntities()。因此,您可以依赖第一个 DbContext 实例在创建第二个 DbContext 实例之前检查兼容性。

在您的 DbContext 中,仅在默认构造函数中设置数据库初始值设定项。在接受 a 的构造函数中,将DbConnection初始化程序设置为 null:

public MyDbContext() : base()
{
    Database.SetInitializer(new CompatibilityCheckingInitializer<MyDbContext>);
}

public MyDbContext(DbConnection connection) : base(connection, false)
{
    Database.SetInitializer(null);
}

这样,您可以在第二个 DbContext 上重复使用数据库连接,但仍然让初始化程序在您的第一个上工作。

自然地,您仍然可以使用任何您想要的构造函数来创建 DbContexts,就像在 Breeze 1.4 之前一样。建议在构造函数中使用该EntityConnection属性来帮助您保存数据库连接。

于 2013-07-29T06:27:06.197 回答