2010-06-30 73 views
1

我们正在使用.Net Entity Framework来完成我们的数据库相关工作。我们的数据库是Sybase SQL Anywhere实体框架数据库连接问题

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

} 

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

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

回答

2

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

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

所以实际上using声明不会关闭EF连接(除非您手动打开它)。在到达using声明的结尾之前,它应该已经处理(释放到连接池或关闭)。

1

不,您正在将AndeDBEntities对象封装在using块中,意思是当其超出范围(因为它实现IDisposable)时将调用其方法Dispose()。这种方法将清除对象所获得的所有非托管资源(假设它已经被开发出来而没有泄漏 - 我认为这是一个公平的推定)。

我不相信这是您的连接限制错误的路线。你有开发者版吗?这仅适用于3个连接。

1

使用语句将确保数据库将被丢弃并关闭连接。

Grz,Kris。