当DataContext被释放时暴露IQueryable?

时间:2009-09-03 20:39:50

标签: linq-to-sql repository-pattern dispose

目前似乎很受欢迎,如果您只是简单地实现存储库

IQueryable<T> FetchAll<T>();

使用LINQ to SQL,然后存储库必须设置一个DataContext,它仍然可以在存储库之外使用。

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

由于

2 个答案:

答案 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,并且一切都在世界各地。