当公开 IQueryable 时,DataContext 何时被释放?

发布于 2024-08-03 18:10:50 字数 229 浏览 1 评论 0原文

正如目前流行的那样,如果您仅

IQueryable<T> FetchAll<T>();

使用 LINQ to SQL 来实现存储库,则存储库必须设置一个在存储库外部仍然可用的 DataContext。

所以我的问题是,如何处理 DataContext? 如果存储库外部的代码生成异常怎么办? 会不会泄露数据库连接?

谢谢

As seems to be popular at the moment, if you implement a repository as simply

IQueryable<T> FetchAll<T>();

using LINQ to SQL, then the repository must set up a DataContext which remains available outside of the repository.

So my question is, How does the DataContext get Disposed?
What if an exception is generated by the code outside of the repository?
Will it be leaking database connections?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴情 2024-08-10 18:10:50

为什么不需要对 DataContext 调用 dispose

摘要 DataContext 在调用查询时(访问数据时)打开一个连接,并在查询结束时关闭它。

Why you dont need to call dispose on DataContext

Summary the DataContext opens a connection when the query is called (when you access the data), and closes it when the query is over.

勿挽旧人 2024-08-10 18:10:50

让您的存储库实现 IDisposable(并在存储库被处置时处置 DataContext)。现在,您的存储库的 API 类似于

using (var repository=new MyRepository) //or use a ServiceLocator or Factory
{
    var myObjects = repository.FetchAll().Where(obj=>obj.Foo == "bar");
    //do something with myObjects
}

现在您的存储库将正确处理您的 DataContext,一切都很好。

Make your repository implement IDisposable (and Dispose of the DataContext when the repository is Disposed). Now the API for your repository is something like

using (var repository=new MyRepository) //or use a ServiceLocator or Factory
{
    var myObjects = repository.FetchAll().Where(obj=>obj.Foo == "bar");
    //do something with myObjects
}

And now your repository will properly dispose of your DataContext and all is well in the world.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文