【问题标题】:Does Linq to Sql close connections automatically? [duplicate]Linq to Sql 会自动关闭连接吗? [复制]
【发布时间】:2015-05-31 11:55:38
【问题描述】:

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

var db = new DataContext();
// Codes

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

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    当您使用using 语句时,连接将被自动管理。DataContext 类实现了IDisposable 接口,因此您需要随时在DataContext 实现上调用 Dispose看完了。

    来自C# In Depth

    我们实施 IDisposable 有几个原因:

    • 如果应用程序逻辑需要在 DataContext 预期使用或有效时间之外保留实体,您可以强制执行该操作
      通过调用 Dispose 签订合同。该实体中的延迟加载程序将
      仍在引用 DataContext 并会尝试使用它(如果有)
      代码尝试导航延迟的属性。这些尝试
      将失败。 Dispose 还强制 DataContext 转储其缓存
      实体化实体,以便单个缓存实体不会
      意外地让所有通过它具体化的实体保持活力
      DataContext,否则会导致看起来像内存
      泄漏。
    • 自动关闭 DataContext 连接的逻辑可能会被欺骗,使连接保持打开状态。 DataContext 依赖 在枚举查询的所有结果的应用程序代码上,因为 到达结果集的末尾会触发连接关闭。 如果应用程序使用 IEnumerable 的 MoveNext 方法而不是 C#或VB中的foreach语句,可以退出枚举 过早地。如果您的应用程序遇到问题 连接未关闭,您怀疑自动关闭 行为不起作用,您可以将 Dispose 模式用作工作 周围。

    【讨论】:

    • .Dispose()关闭连接?
    • @Mohamadshiralizadeh:- 你可以参考csharpindepth.com/ViewNote.aspx?NoteID=89
    • Close()实际上调用了Dispose(),但是using语句会自动调用资源上的dispose,所以只要使用using就可以了,不要害怕关闭或者dispose。
    • @pid:- 是的,当我们使用 using 语句时这是正确的,那么我们不必担心关闭连接(我在我的答案中也更新了
    • @Mohamadshiralizadeh:- 当我们使用 using 语句时,会自动调用 dispose 方法。关键是当我们使用 DataContext 时,它应该总是被“销毁”或处置,所以最好在 using 语句中使用 Context 对象:
    【解决方案2】:

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

    不要将您的代码关闭连接与实际的底层物理连接混淆。

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

    【讨论】:

    • 你的意思是第一个版本没有关闭连接?
    • 不,第一个版本不会关闭连接,直到应用程序上下文被释放(即应用程序终止时)。 using 语句是推荐的最佳实践,确实没有反对意见。
    • 是 .net 源我在 QqlProvider 中看到这个 Linq 使用 ... } finally { this.conManager.ReleaseConnection(this); } return result; } 它是什么?它确切地说 linq to sql 在任何执行后关闭连接..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2014-04-08
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多