我们有两种不同的查询策略,理想情况下我们希望在我们的站点上一起操作而不打开冗余连接。一种策略是使用企业库来拉取Database
对象和Execute_____(DbCommand)
s Database
,而不直接选择任何类型的连接。有效地像这样:
Database db = DatabaseFactory.CreateDatabase();
DbCommand q = db.GetStoredProcCommand("SomeProc");
using (IDataReader r = db.ExecuteReader(q))
{
List<RecordType> rv = new List<RecordType>();
while (r.Read())
{
rv.Add(RecordType.CreateFromReader(r));
}
return rv;
}
另一种较新的策略使用一个库,该库要求一个IDbConnection
,它Close()
在执行后立即 es。所以,我们做这样的事情:
DbConnection c = DatabaseFactory.CreateDatabase().CreateConnection();
using (QueryBuilder qb = new QueryBuilder(c))
{
return qb.Find<RecordType>(ConditionCollection);
}
但是,返回的连接CreateConnection()
与 使用的连接不同Database.ExecuteReader()
,后者显然在查询之间保持打开状态。因此,当我们在使用 a 中的旧策略之后调用使用新策略的数据访问方法时,它会导致不必要的提升——我不确定我们是否有能力配置的提升(我们没有管理权限到 SQL 服务器)。TransactionScope
在我们继续修改查询构建器库以使用企业库的Database
对象之前......有没有办法检索(如果存在)其中一种Database.Execute_______()
方法最后使用的打开连接?