【问题标题】:Database.SetInitializer() in a static constructor?静态构造函数中的 Database.SetInitializer()?
【发布时间】:2023-03-29 18:34:01
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2020-05-05
      • 2011-03-01
      • 1970-01-01
      • 2011-04-19
      • 2016-05-11
      • 2011-06-11
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多