4

Oracle データベースがあり、Oracle.ManagedDataAccess.

場合によっては、1 回のトランザクションでアクションを実行する必要がありますが、多くの場合そうではありません。

DbConnection単一の 内でオブジェクトを処理する最善の方法がわかりませんTransactionScope

DbConnectionリポジトリにa を挿入し、LifetimePerScopeそれらをすべて同じDbConnectionインスタンスにするために使用することもできます。.Open()しかし、それは賢明な動きですか、一度接続して大丈夫ですか。

using (var scope = _lifetimeScope.BeginLifetimeScope())
{
    var connection = scope.Resolve<IDbConnection>();
    var personRepo = scope.Resolve<IPersonRepository>();
    var workRepo = scope.Resolve<IWorkRepository>();
    connection.Open();
    var transaction = connection.BeginTransaction()
    personRepo.DeleteById(someId);
    workRepo.DeleteByPersonId(someId);
    transaction.Commit();
}

LifetimeScopeこれにより、トランザクションを使用していない場合でも、常に を使用し、リポジトリ メソッドの外部で接続を開く必要があります。

TransactionScopes は単一の接続に依存していますか、それとも同じトランザクション内で複数の接続を開くことができますか (トランザクションが開いている間、connectionPool はそれをどのように処理しますか?)

私は DbConnections とそのすべての完全な部外者であるため、TransactionScope と DbConnections を使用する最善の方法を完全に誤解している可能性があります。

4

2 に答える 2

3

重複の可能性:データベース接続を常に閉じるのはなぜですか?

これには報奨金があるため、重複としてフラグを立てることはできません:(

とにかく、接続プーリングの大部分はあなたのために行われます。できるだけ早く接続を閉じて、それらをプールに戻す必要があります。

トランザクションは特定の開いている接続に関連しており、接続を閉じるときに終了する必要があります。

于 2015-09-10T11:59:51.993 に答える