3

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

谢谢,卢锡安

4

4 回答 4

2

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

于 2009-02-15T17:55:27.000 回答
2

问:我的数据库连接保持打开状态多久?

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

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

使用连接对象构造 DataContext 时的连接状态。

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


MSDN LINQ 到 SQL 常见问题解答

于 2009-02-15T18:01:55.923 回答
1

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

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

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

于 2009-02-15T17:56:57.950 回答
1

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

已经有很多其他人问过类似的问题。如果您检查 其中一些,您会发现一些非常好的讨论。

于 2009-02-15T19:35:28.993 回答