Linq to SQL存储库应该实现IDisposable

在过去的几天里,我一直在用Linq搜索关于存储库模式的信息。 那里有很多信息,但它经常是矛盾的,我仍然在寻找一个明确的来源。

我仍然不确定的一件事是存储库是否应该实例化它自己的DataContext并使用SubmitChanges方法,或者是否应该注入DataContext并在外部处理提交。 我已经看过这两个设计,但对推理没有真正的评论。

无论如何,以下模式很常见

class Repository { DataContext db = new LinqDataContext(); public IEnumerable GetAll() { ... } public T GetById() { ... } ... etc public void SubmitChanges() { ... } } 

所以我的主要问题是,通过上面的实现,为什么存储库不需要实现IDisposable? 我已经看到上面几百个例子,并且它们似乎都没有打扰处理DataContext。 这不是内存泄漏吗?

如果将autoclose设置为false,则处理DataContext将关闭基础连接 如果您不打电话处理,则必须等待GC为您拨打电话。 您应该实现IDisposable并处置您的存储库,这些存储库又应该处理它们的DataContext。

另一种解决方案是,如果您的方法在单个事务中不能一起工作,则为存储库中的每个方法创建新的数据上下文。 然后,您可以通过using()指令使用它们后立即处理它们的上下文。

没有必要但你可能应该实现 IDisposable