C#Linq-to-Sql – 应该使用IDisposable处理DataContext

我有几个处理数据库的方法,他们都通过调用开始

FaierDbDataContext db = new FaierDbDataContext(); 

由于Linq2Sql的DataContext对象实现IDisposable,这应该用于“使用”?

 using (FaierDbDataContext db = new FaierDbDataContext()) { // use db here } 

以这种或那种方式使用它有什么意义?

与大多数实现IDisposable的types不同,DataContext并不需要处理,至less在大多数情况下不是。 我问马特·沃伦这个devise决定,这是他的回应:

我们实现IDisposable有几个原因:

  • 如果应用程序逻辑需要在DataContext预期被使用或有效的时候保存到实体上,则可以通过调用Dispose来强制执行该合同。 该实体中的延迟加载器仍将引用DataContext,并尝试在任何代码尝试导航延迟属性时使用它。 这些尝试将失败。 Dispose也强制DataContext转储其物化实体的caching,以便单个caching的实体不会意外地保持通过该DataContext物化的所有实体,否则会导致看起来像内存泄漏。
  • 自动closuresDataContext连接的逻辑可能会导致连接断开。 DataContext依赖枚举查询的所有结果的应用程序代码,因为到达结果集的末尾会触发连接closures。 如果应用程序使用IEnumerable的MoveNext方法而不是C#或VB中的foreach语句,则可以过早退出枚举。 如果您的应用程序遇到连接未closures的问题,并且您怀疑自动closures行为不起作用,则可以使用Dispose模式作为解决方法。

从源头上