LINQ上下文应该每次都关闭吗?

时间:2009-02-15 17:48:15

标签: .net linq-to-sql datacontext

在LINQ to SQL中,是否有必要在对数据库执行select之后关闭上下文(当然,在使用数据之后)?如果我把它打开,是不是意味着与服务器的连接保持打开状态?

谢谢, 卢西恩

4 个答案:

答案 0 :(得分:2)

在使用Dispose方法关闭DataContext之前,不会关闭和释放基础连接。在使用DataContext之后,应始终调用Dispose。 将DataContext视为传统的Connection对象,或多或少都是它的底层。

答案 1 :(得分:2)

Q值。我的数据库连接保持打开多长时间?

一个。在使用查询结果之前,连接通常保持打开状态。如果您希望花时间处理所有结果并且不反对缓存结果,请将ToList(TSource)应用于查询。在每个对象只处理一次的常见场景中,流模型在DataReader和LINQ to SQL中都是优越的。

连接使用的确切细节取决于以下内容:

如果使用连接对象构造DataContext,则为连接状态。

连接字符串设置(例如,启用多个活动结果集(MARS)。有关详细信息,请参阅多个活动结果集(MARS)。


来自MSDN LINQ to SQL FAQ

答案 2 :(得分:1)

我对LiNQ中所有东西的名字都有点不确定。在实体框架中,它意味着对象上下文正在尝试进行更改跟踪,在出现断开连接的情况时会导致很多问题。

遗憾的是,ASP.NET今天与变更跟踪不太兼容,因此在使用后关闭上下文是在asp.net中处理实体框架的最佳方式。如果我试图让tyhe上下文打开,我有时会在更新实体时遇到问题我认为它应该是Linq中的相同问题。

在具有同一计算机或本地网络中的数据库的Windows窗体应用程序中,我将通过外观重用对象上下文(减少代码重复),以便能够从更改跟踪和直接连接到数据库中受益。

答案 3 :(得分:1)

简短的回答是肯定的,你应该只在需要时打开一个datacontext并尽快关闭它。如果您不处理它,底层数据库连接可能会保持打开状态。

还有很多人已经提出过类似的问题。如果您check somethem out,您会发现一些非常好的讨论。