实体框架数据库连接问题
问题描述:
我们正在使用.Net Entity Framework
来完成我们的数据库相关工作。我们的数据库是Sybase SQL Anywhere
。实体框架数据库连接问题
using (AndeDBEntities db = new AndeDBEntities(decryptConnStr()))
{
}
我们使用大量的上述语句来访问数据库。我的问题是,我们是否需要在访问完成后每次关闭连接以及如何操作?
有一次我看到“数据库服务器连接限制超出”错误。我想知道我们的数据库连接代码中一定有什么问题。
答
连接应该自动关闭。 Sybase EF支持类中可能存在资源泄漏。
有关更多信息,请参阅Managing Connections。请注意(默认情况下)EF将为每个查询或SaveChanges
调用打开并处理数据库连接。如果Sybase的支持类不能很好地处理这个问题(例如,使用连接池),那么资源泄漏可能会变得很明显,否则就不会。
所以实际上using
声明不会关闭EF连接(除非您手动打开它)。在到达using
声明的结尾之前,它应该已经处理(释放到连接池或关闭)。
答
不,您正在将AndeDBEntities
对象封装在using
块中,意思是当其超出范围(因为它实现IDisposable
)时将调用其方法Dispose()
。这种方法将清除对象所获得的所有非托管资源(假设它已经被开发出来而没有泄漏 - 我认为这是一个公平的推定)。
我不相信这是您的连接限制错误的路线。你有开发者版吗?这仅适用于3个连接。
答
使用语句将确保数据库将被丢弃并关闭连接。
Grz,Kris。