3

许多人可能知道为什么我们需要使用下面显示的代码。但是,我想将此逻辑分层,并且我不想在我的 Web 层中引用实体框架 DLL,因此我最终将此代码放在我的DbContext类的静态构造函数中。

这是一个坏主意吗?这样做会影响应用程序的性能吗?

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

1 回答 1

4

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

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

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

附带说明:有时可能需要在应用程序开始时进行这项昂贵的工作,以便在应用程序开始时有延迟,并在用户在应用程序中运行第一个查询时避免它。要强制初始化,您不仅要设置初始化程序,还要运行初始化本身,例如:

Database.SetInitializer<DataContext>(null);
using (var context = new DataContext())
{
    context.Database.Initialize(false);
}
于 2013-05-10T22:20:34.913 回答