在关于企业实体框架的 Julie Lermans 课程中,她创建了一个看起来像这样的基本上下文类。
Public class BaseContext<Tcontext> : DBContext where Tcontext :DBContext
{
static BaseContext()
{
Database.SetInitializer<TContext>(null);
}
Protected BaseContext()
:base("connectionStringName")
{}
}
像这样使用:
public class xxxContext : BaseContext<xxxContext>
{
public Field A { get;set;}
}
然后她继续说,因为她的存储库中的数据库初始化看起来像这样
Database.SetInitializer(new MigrateDatabaseToLatestVersion<XXXXContext>())
using (var context = new xxxContext())
(
Assert.AreEqual(0, context.Customers.Count()));
)
我的问题是:在最后一段代码中(在本例中),Database.SetInitializer 首先执行,将 MigrateDatabaseToLatestVersion 设置为初始化程序。但是,在创建上下文时,基类的静态构造函数会在实际创建上下文之前执行 (Database.SetInitializer(null))。当代码到达 context.Customers.Count() 时 - 初始化程序将为 NULL,然后执行默认初始化程序 (CreateIfDatabaseNotExists)。
我错了吗?MigrateDatabaseToLatestVersion 如何保留?或者是吗?