实体框架数据库连接问题

时间:2010-06-30 15:07:55

标签: c# database entity-framework

我们正在使用.Net Entity Framework来完成与数据库相关的工作。我们的数据库是Sybase SQL Anywhere

using (AndeDBEntities db = new AndeDBEntities(decryptConnStr()))
{

}

我们使用大量上述语句来访问数据库。我的问题是,我们是否需要在访问完成后每次关闭连接以及如何执行此操作?

有一段时间我看到“超出数据库服务器连接限制”错误。我想知道我们的数据库连接代码肯定有问题。

3 个答案:

答案 0 :(得分:2)

应自动关闭连接。 Sybase EF支持类中可能存在资源泄漏。

有关详细信息,请参阅Managing Connections。请注意(默认情况下)EF将为每个查询或SaveChanges调用打开并配置数据库连接。如果Sybase的支持类不能很好地处理这个问题(例如,使用连接池),那么资源泄漏可能会变得明显,否则它就不会出现。

所以实际上using语句不会关闭EF连接(除非你手动打开它)。它应该在到达using语句结束之前已经被释放(释放到连接池或关闭)。

答案 1 :(得分:1)

不,您将AndeDBEntities块包装在using块中,意味着当它超出范围时将调用Dispose()方法(因为它实现IDisposable )。这个方法将清除对象所获得的所有非托管资源(假设它是在没有泄漏的情况下开发的 - 我认为这是一个公平的假设)。

我不相信这是您的连接限制错误的路径。你有开发者版吗?这仅获得3个连接的许可。

答案 2 :(得分:1)

using语句将确保db将被释放并且连接已关闭。

Grz,Kris。