【问题标题】:Entity Frameworks and database connections实体框架和数据库连接
【发布时间】:2009-12-18 13:22:37
【问题描述】:

我正在调试Jaroslaw Kowalski 提供程序包装器。在调试它时,我观察到实体框架在每次查询后都会关闭连接。在与数据库的每次交互中,在应用程序的生命周期内,都会打开一个数据库连接,并在执行查询后关闭连接

我的问题是:

  • 底层提供者是否默认做连接池。
  • 如果我提供自己的池,那么我如何知道何时关闭连接。目前我正在注册 Thread.GetDomain().ProcessExit 事件并在事件触发时关闭连接。这种方法好吗?

困扰我的是实体框架本身正在关闭连接。所以我有点犹豫是否将连接池化,否则在特殊情况下可能会导致问题。

【问题讨论】:

    标签: c# entity-framework dataprovider


    【解决方案1】:

    仅供参考:

    EF 只关闭它打开的连接。

    所以如果你手动做这样的事情:

    ((ctx.Connection as EntityConnection).StoreConnection as SqlConnection).Open();
    

    后续查询和SaveChanges() 不应关闭该连接。

    希望对你有帮助

    亚历克斯

    【讨论】:

      【解决方案2】:

      默认连接池 = 1 个连接。所以不用担心。

      这里的整个想法是我们有 1 个编程模型(断开连接)并且配置和调整是外部的。

      【讨论】:

        【解决方案3】:

        在 .Net 4 中,引用:Managing Connections and Transactions

        管理连接时需要考虑以下注意事项:

        如果在操作之前对象上下文尚未打开,则对象上下文将打开连接。如果对象上下文在操作过程中打开了连接,它总是会在操作完成时关闭连接。

        如果你手动打开连接,对象上下文不会关闭它。调用 Close 或 Dispose 将关闭连接。

        如果对象上下文创建了连接,那么在释放上下文时连接总是会被释放。

        在长期运行的对象上下文中,您必须确保在不再需要上下文时将其释放。

        如果您为对象上下文提供一个打开的 EntityConnection,则必须确保它已被释放。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-13
          • 2017-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多