C# Linq-to-Sql - 应该使用 IDisposable 处理 DataContext [英] C# Linq-to-Sql - Should DataContext be disposed using IDisposable
问题描述
我有几个处理 DB 的方法,它们都是从调用开始的
I have several methods that deal with DB and all of them start by calling
FaierDbDataContext db = new FaierDbDataContext();
既然Linq2Sql DataContext 对象实现了IDisposable,那么这个应该和using"一起使用吗?
Since the Linq2Sql DataContext object implements IDisposable, should this be used with "using"?
using (FaierDbDataContext db = new FaierDbDataContext()) {
// use db here
}
以这种或另一种方式使用它有什么影响?
What are the implications of using it one way or another?
推荐答案
与大多数实现的类型不同IDisposable,DataContext 没有真的需要处理——至少不是大多数情况下.我问马特沃伦关于这个设计决定,这里是他的回应:
Unlike most types which implement IDisposable, DataContext doesn't really need disposing - at least not in most cases. I asked Matt Warren about this design decision, and here was his response:
我们实施的原因有几个IDisposable:
There are a few reasons we implemented IDisposable:
- 如果应用程序逻辑需要在预计将使用 DataContext 或有效,您可以通过以下方式执行该合同调用处置.延迟加载器该实体仍将引用DataContext 并将尝试使用它如果任何代码尝试导航延迟属性.这些尝试将失败.Dispose 也强制DataContext 转储其缓存实体化实体,以便单个缓存实体不会意外保持所有实体的存活通过那个 DataContext,这将否则会导致看起来像内存泄漏.
- 自动关闭DataContext连接的逻辑可以是被骗离开连接打开.DataContext 依赖于枚举所有的应用程序代码查询结果结果集的结尾触发连接关闭.如果应用程序使用 IEnumerable 的MoveNext 方法而不是 foreach在 C# 或 VB 中声明,您可以退出枚举过早.如果你的应用程序遇到问题连接没有关闭和你怀疑自动关闭行为不工作,你可以使用 Dispose模式作为一种解决方法.
来自来源
这篇关于C# Linq-to-Sql - 应该使用 IDisposable 处理 DataContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!