我有几种处理数据库的方法,所有这些方法都是通过调用
开始的FaierDbDataContext db = new FaierDbDataContext();
由于Linq2Sql DataContext对象实现了IDisposable,是否应该与“using”一起使用?
using (FaierDbDataContext db = new FaierDbDataContext()) {
// use db here
}
以某种方式使用它有什么含义?
答案 0 :(得分:29)
来自source 的与大多数实施的类型不同 IDisisable,DataContext没有 真的需要处置 - 至少不是 在多数情况下。我问马特沃伦 关于这个设计决定,在这里 是他的回答:
我们实施的原因有几个 IDisposable的:
- 如果应用程序逻辑需要保持一个实体超越 期望使用DataContext或 有效的,您可以执行该合同 调用Dispose。延期装载机 该实体仍将引用 DataContext并将尝试使用它 如果任何代码试图导航 延期财产。这些尝试 将失败。处置也迫使 DataContext转储其缓存 物化实体使单一 缓存实体不会意外 让所有实体保持活力 通过那个DataContext,它会 否则会导致看起来像是一个 内存泄漏。
- 自动关闭DataContext连接的逻辑可以是 欺骗离开连接 打开。 DataContext依赖于 应用程序代码枚举所有 到达后的查询结果 结果集的结尾触发了 连接关闭。如果 应用程序使用IEnumerable MoveNext方法而不是foreach 在C#或VB中声明,你可以退出 过早的枚举。如果你的 应用程序遇到的问题 连接没有关闭和你 怀疑自动关闭行为 不工作你可以使用Dispose 模式作为一种解决方法。