gpt4 book ai didi

c# - Linq to SQL 存储库应该实现 IDisposable

转载 作者:行者123 更新时间:2023-11-30 15:10:47 25 4
gpt4 key购买 nike

在过去的几天里,我一直在使用 Linq 谷歌搜索存储库模式。那里有很多信息,但往往相互矛盾,我仍在寻找权威的来源。

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

无论如何,下面的模式很常见

class Repository<T>
{
DataContext db = new LinqDataContext();

public IEnumerable<T> GetAll() { ... }
public T GetById() { ... }

... etc

public void SubmitChanges() { ... }
}

所以我的主要问题是,有了上面的实现,为什么存储库不需要实现 IDisposable?我已经看到了数百个上述示例,但似乎没有一个会费心处理 DataContext。这不是内存泄漏吗?

最佳答案

如果您将自动关闭设置为 false,则处置 DataContext 会关闭底层连接。如果您不调用处置,则必须等待 GC 为您调用它。您应该实现 IDisposable 并处置您的存储库,而存储库又应处置其 DataContext。

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

关于c# - Linq to SQL 存储库应该实现 IDisposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2975760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com