【问题标题】:Does EF 4 Code First's ContextBuilder Dispose its SqlConnection?EF 4 Code First 的 ContextBuilder 是否处理其 SqlConnection?
【发布时间】:2010-06-11 12:07:06
【问题描述】:

查看 ADO.Net EF 4 CTP 3 中的 Code First 并想知道如何处理 their walkthrough 中的 SqlConnection。那是 ContextBuilder 的责任吗?示例中是否缺少它?

  var connection = new SqlConnection(DB_CONN);
  var builder = new ContextBuilder<BloggingModel>();
  var connection = new SqlConnection(DB_CONN);

  using (var ctx = builder.Create(connection))
  {
      //... 
  }

【问题讨论】:

  • 这段代码与链接上的不太一样,但我认为这是一个剪切和粘贴错误。
  • @Craig:为了清楚起见,只是缩写... :-)

标签: entity-framework-4 code-first


【解决方案1】:

我刚刚意识到我可以向 ObjectContext.Disposing 添加一个事件处理程序并解决这个问题。

至少在 CTP 3 中,在释放 ObjectContext 时释放 Connection。

由于我已经将 ObjectContext 子类化,因此我在子类中实现了 IDisposable 并从那里调用 Connection.Dispose()。

【讨论】:

    【解决方案2】:

    Close and Dispose in SqlConnection are functionally equivalent。因此,只要连接关闭——我想你会发现它是,但不要相信我的话——示例代码就可以工作。

    但既然你问了,你可能还是应该把它处理掉。它不会造成任何伤害,并且会阻止其他人提出同样的问题。

    【讨论】:

    • 我知道处理连接也会关闭它,但是示例代码处理的是ctx,而不是连接。 (对我而言)不知道 ContextBuilder 的合同是否确保它将处理(并因此关闭)它提供的连接。
    • 换个说法:因为ContextBuilder关闭了连接,所以连接不需要被dispose。
    • ContextBuilder 在我的测试中没有关闭连接(参见我的单独答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多