我有一個Oracle數據庫,我正在使用Oracle.ManagedDataAccess
。通過連接池,transactionScope和依賴注入來使用DbConnection,DbTransaction的正確方法?
在某些情況下,我需要在單個交易中執行操作,但通常不會。
我不確定在單個TransactionScope
內處理DbConnection
對象的最佳方式。
我可以將DbConnection
注入存儲庫,然後使用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的最佳方式。