【问题标题】:Entity Framework: Should I close the connection if I open it?实体框架:如果我打开连接,我应该关闭它吗?
【发布时间】:2013-02-27 16:55:15
【问题描述】:

我正在从我的ObjectContext 获取底层连接。我需要检查连接的状态并在必要时打开它。我想知道是否需要关闭它,或者这是否会为我处理。

无论如何,我正在处理我的上下文,我认为这正在关闭连接。

我应该首先手动打开此连接吗?

仅供参考:我故意避免使用方便的方法ExecuteStoredCommandExecuteStoredQuery。我们有一些针对旧 ADO.NET 类的旧代码。我只想公开连接并确保它可以使用。

【问题讨论】:

    标签: entity-framework database-connection


    【解决方案1】:

    Entity Framework 自己管理打开和关闭连接。通常,它会在完成命令后关闭连接。所以在使用连接之前,你必须检查连接状态并在它关闭时打开它。完成后您可以关闭它(而不是丢弃它!)。

    当上下文被释放时,连接总是关闭的。

    如果您希望您的旧代码和实体框架在一个事务中运行,您可能必须将您的代码包含在 TransactionScope 中。

    【讨论】:

    • 我不知道打开和关闭连接是否会对性能产生影响。 Entity Framework 是否为它运行的每个命令打开和关闭连接?
    • 据我所知,是的。但是连接池管理着与数据库的真实连接,所以在很多情况下,真实连接甚至可能还没有关闭。参见例如this post.
    • 我创建了一个实现IDisposable的简单连接管理器类。
    • 这是一个web应用吗,如果是的话,一般是根据http请求来管理连接,http请求进来时打开,关闭时关闭。你不需要创建一个新的类,ObjectContext 或 DbContext 已经达到了这个目的
    • 我正在使用 Ninject 的 InRequestScope 来限制我的上下文的生命周期。问题是ObjectContext 中的连接直到第一次使用才打开。偶尔会先运行旧代码。
    【解决方案2】:

    我认为如果你处理上下文,它会为你关闭连接。如果你创建一个新的 ObjectContext,连接也会被打开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2011-11-24
      相关资源
      最近更新 更多