冗長な接続を開かずに、理想的にはサイトで組み合わせて操作したい 2 つの異なるクエリ戦略があります。1 つの戦略では、エンタープライズ ライブラリを使用して、接続を直接選択せずに上のDatabase
オブジェクトとをプルします。効果的には次のようになります。Execute_____(DbCommand)
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;
}
もう 1 つの新しい戦略では、実行直後に esIDbConnection
を要求するライブラリを使用します。Close()
したがって、次のようにします。
DbConnection c = DatabaseFactory.CreateDatabase().CreateConnection();
using (QueryBuilder qb = new QueryBuilder(c))
{
return qb.Find<RecordType>(ConditionCollection);
}
しかし、 によって返される接続は、 によってCreateConnection()
使用されるものと同じではなく、Database.ExecuteReader()
明らかにクエリ間で開いたままになっています。そのため、 内で古い戦略を使用した後に新しい戦略を使用してデータ アクセス メソッドを呼び出すと、不要なプロモーションが発生します。これは、構成する機能があるかどうかわかりません (管理アクセス権がありません)。 SQL Server に)。TransactionScope
query-builder-library を変更して Enterprise Library のDatabase
オブジェクトを操作する方法を説明する前に...メソッドの 1 つによって最後に使用された開いている接続が存在する場合、それを取得するDatabase.Execute_______()
方法はありますか?