我有一个DAL / Repository类来管理与数据库的连接,所有调用都必须经过这一层。我实现了这样的代码:
public class DataAccessLayer
{
//SCRUD Methods
public IList<T> Get<T>(Criteria criterias) where T : class
{
using (IConnection connection = ConnectionFactory.GetConnection("myConName"))
{
ICommand command = connection.GetCommand();
command.CommandText = myMapper.GenerateQuery();
using (IDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
//Do something here
}
}
}
}
}
我的ConnectionFactory如下所示:
public class ConnectionFactory
{
public static IConnection GetConnection(string conName)
{
return new SqlConnection(ConfigurationManager.ConnectionStrings[conName].ConnectionString);
}
}
我认为using
等于try
和finally
等Dispose()
。
但是,上传这个新版本(我们之前使用NHibernate来管理会话)开始在生产中导致此错误。
我还能尝试什么,我如何测试并确保在生产中不会发生这种情况?
编辑:值得注意的是我们开始删除旧的NHibernate实现,但由于项目已经相当大,我们仍在使用NHibernate与这个新的数据访问层结合使用。这可能是原因吗? NHibernate是否会垄断连接池,甚至在遵循(据称)良好做法后会出现此错误? 或者这可能来自错误的NHibernate实现?