У меня есть база данных Oracle, и я использую Oracle.ManagedDataAccess
.Правильный способ использования DbConnection, DbTransaction с пулом соединений, транзакцией и инъекцией зависимости?
В некоторых случаях мне нужно будет делать действия в одной транзакции, но часто это не так.
Я не уверен, что лучший способ обрабатывать DbConnection
объектов в пределах одного TransactionScope
.
Я мог бы ввести 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.