Linq to Sql会自动关闭连接吗?

时间:2015-05-31 11:55:39

标签: c# linq-to-sql

Linq to Sql会自动关闭连接吗?或者我应该使用using

var db = new DataContext();
// Codes

using (var db = new DataContext())
{
    // Codes
}

2 个答案:

答案 0 :(得分:2)

当您使用using语句时,将自动管理连接。DataContext类实现IDisposable接口,因此您需要在{上调用Dispose完成后,{1}}实施。

来自C# In Depth

  

我们实施IDisposable有几个原因:

     
      
  • 如果应用程序逻辑需要保留超出预期使用DataContext或有效的实体,则可以强制执行   通过调用Dispose进行合同。该实体中的延期装载机将为   仍在引用DataContext,如果有的话,会尝试使用它   代码尝试导航延迟属性。这些尝试
      将失败。 Dispose还强制DataContext转储其缓存   物化实体,以便单个缓存实体不会   意外地保持通过该实体实现的所有实体   DataContext,否则会导致看似记忆的内容   泄漏。
  •   
  • 可以欺骗自动关闭DataContext连接的逻辑,使连接保持打开状态。 DataContext依赖   在应用程序代码上枚举查询的所有结果   到结果集的末尾会触发连接关闭。   如果应用程序使用IEnumerable的MoveNext方法而不是a   在C#或VB中使用foreach语句,可以退出枚举   过早。如果您的应用程序遇到问题   连接没有关闭,你怀疑自动关闭   行为不起作用你可以使用Dispose模式作为工作   周围。
  •   

答案 1 :(得分:1)

using版本是您可以做的最好的。底层连接没有关闭,这是一件好事。连接保存在池中,以便它们可以回收利用。

请勿将代码关闭与实际的基础物理连接混淆。

您必须关闭连接,处理此问题的最佳方法(最佳做法)是using语句。