2013-05-10 120 views
2

关于使用Entity Framework 5,我有一个非常快速的问题。许多人可能知道为什么我们需要使用下面显示的代码。但是,我想将这个逻辑分成不同的层,我不想在我的Web层中引用实体框架DLL,因此我最终将这些代码放入了我的DbContext类的静态构造函数中。Database.SetInitializer()在静态构造函数中?

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

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

在此先感谢,Onam。

回答

4

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

您也可以通过数据层的静态方法调用此行,而不必在调用Web层组件中引用EF。

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

附注:在应用程序启动时进行这种昂贵的工作有时可能是需要的,以便在应用程序的一开始就有延迟,并避免在用户运行第一个查询时应用。为了强制初始化,您不但要设置初始化器,还要运行初始化本身,例如如下所示:

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