实体框架和数据库连接

时间:2009-12-18 13:22:38

标签: c# entity-framework dataprovider

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

我的问题是:

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

困扰我的是Entity Framework本身正在关闭连接。所以我对连接池有点犹豫不决,否则在特殊情况下可能会出现问题。

3 个答案:

答案 0 :(得分:4)

供参考:

EF仅关闭它打开的连接。

因此,如果您手动执行此类操作:

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

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

希望这有帮助

亚历

答案 1 :(得分:2)

默认connectionpool = 1连接。所以不要担心。

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

答案 2 :(得分:0)

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

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

如果在操作之前尚未打开连接,则对象上下文将打开该连接。如果对象上下文在操作期间打开连接,则它将始终在操作完成时关闭连接。

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

如果对象上下文创建了连接,则在处理上下文时将始终处理连接。

在长时间运行的对象上下文中,必须确保在不再需要上下文时处置它。

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