目前似乎很受欢迎,如果您只是简单地实现存储库
IQueryable<T> FetchAll<T>();
使用LINQ to SQL,然后存储库必须设置一个DataContext,它仍然可以在存储库之外使用。
所以我的问题是,DataContext是如何处理的? 如果存储库外部的代码生成异常怎么办? 它会泄漏数据库连接吗?
由于
答案 0 :(得分:4)
Why you dont need to call dispose on DataContext
摘要DataContext在调用查询时(访问数据时)打开连接,并在查询结束时关闭它。
答案 1 :(得分:2)
使您的存储库实现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,并且一切都在世界各地。