我们正在使用.Net Entity Framework
来完成与数据库相关的工作。我们的数据库是Sybase SQL Anywhere
。
using (AndeDBEntities db = new AndeDBEntities(decryptConnStr()))
{
}
我们使用大量上述语句来访问数据库。我的问题是,我们是否需要在访问完成后每次关闭连接以及如何执行此操作?
有一段时间我看到“超出数据库服务器连接限制”错误。我想知道我们的数据库连接代码肯定有问题。
答案 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。