Database.SetInitializer()在静态构造函数中?

时间:2013-05-10 20:09:20

标签: entity-framework entity-framework-5 static-constructor

许多人可能知道为什么我们需要使用下面显示的代码。但是,我想将这个逻辑分成几层,我不想在我的web层中引用Entity Framework DLL,因此我最终把这段代码放在我的DbContext类的静态构造函数中。

这是个坏主意吗?这样做会对应用程序造成性能影响吗?

Database.SetInitializer<DataContext<T>>(null);

1 个答案:

答案 0 :(得分:4)

没有值得提及的性能影响。为应用程序和创建第一个类实例调用一次静态构造函数。我在大多数应用程序中都这样做,并没有发现任何问题。

您也可以通过数据层的静态方法调用此行,而无需在调用Web图层集合中引用EF。

我相信这一行只设置了初始化程序的内部引用,并且没有做任何昂贵的事情。当使用第一个上下文实例时,完成了昂贵的工作 - 发现和构建EF模型。

作为旁注:在应用程序启动时进行这项昂贵的工作有时可能是为了在应用程序的最开始时有延迟,并在用户运行应用程序中的第一个查询时避免它。要强制初始化,您不仅要设置初始化程序,还要运行初始化本身,例如:

Database.SetInitializer<DataContext>(null);
using (var context = new DataContext())
{
    context.Database.Initialize(false);
}