【问题标题】:Create Entity context in class constrctor? or create it whenever need to use it?在类构造函数中创建实体上下文?还是在需要时创建它?
【发布时间】:2014-09-28 18:01:02
【问题描述】:

我正在从事其他人开发的项目。在项目中有

public class HomeController : Controller
{
    public HomeController() {
        _EntitiesContext = new EntitiesContext();
        _UsersContext = new UsersContext();
    }
    public UsersContext _UsersContext { get; set; }
    public EntitiesContext _EntitiesContext { get; set; }

    ......

然后,每当它需要查询时,它就会使用这些上下文。

通常,我所做的是:我不在 HomeController() 中创建这些上下文,而是在需要时通过 使用 .... 语法创建它们他们。我认为它会打开连接,进行查询,然后关闭连接。否则,连接将始终打开。如果太多人使用它,可能会产生问题。

我说的对吗?我想我以前在网上看过这个,但现在找不到了。

谢谢

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework lifetime


    【解决方案1】:

    我认为它会打开连接,进行查询,然后关闭连接。

    不太对。 ADO.NET 使用connection pool。所以没有打开到数据库的实际连接,它是从连接池中提取的。当您在 DbContext 上调用 Dispose 时,它​​不会关闭连接。它只是将它返回到池中,以便以后可以重用。所以不要害怕将 DbContext 实例包装在 using 语句中。

    【讨论】:

      【解决方案2】:

      通常的做法是为每个 HTTP 请求创建一个上下文,然后在需要时使用相同的上下文。

      实现它的最可行的方法是注入 EntitiesContext 依赖项(传统上使用构造函数),并且使用配置的对象生命周期为您注入它的最简单方法是使用 IoC container

      例如(使用 Microsoft Unity):

      public HomeController(EntitiesContext context) {
          _EntitiesContext = context;
      }
      

      和容器配置(在应用程序初始化时):

      container.RegisterType<EntitiesContext>(new PerHttpRequestLifetime());
      

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多