当公开 IQueryable 时,DataContext 何时被释放?
正如目前流行的那样,如果您仅
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么不需要对 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.
让您的存储库实现 IDisposable(并在存储库被处置时处置 DataContext)。现在,您的存储库的 API 类似于
现在您的存储库将正确处理您的 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
And now your repository will properly dispose of your DataContext and all is well in the world.