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 を使用する最善の方法を完全に誤解している可能性があります。