Как проверить, есть ли у DbContext транзакция?
Справочная информация: у меня есть служба WCF с SimpleInjector в качестве IoC, который создает экземпляр DbContext для запроса WCF.
Сам бэкэнд это CQRS. У CommandHandlers есть много декораторов (проверка, авторизация, ведение журнала, некоторые общие правила для разных групп обработчиков и т. Д.), И одним из них является Transaction Decorator:
public class TransactionCommandHandlerDecorator<TCommand> : ICommandHandler<TCommand>
where TCommand : ICommand
{
private readonly ICommandHandler<TCommand> _handler;
private readonly IMyDbContext _context;
private readonly IPrincipal _principal;
public TransactionCommandHandlerDecorator(ICommandHandler<TCommand> handler,
IMyDbContext context, IPrincipal principal)
{
_handler = handler;
_context = context;
_principal = principal;
}
void ICommandHandler<TCommand>.Handle(TCommand command)
{
using (var transaction = _context.Database.BeginTransaction())
{
try
{
var user = _context.User.Single(x => x.LoginName == _principal.Identity.Name);
_handler.Handle(command);
_context.SaveChangesWithinExplicitTransaction(user);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
}
}
}
Проблема возникает, когда какая-либо команда пытается выполнить цепочку выполнения другой команды в том же запросе WCF. Я получил ожидаемое исключение в этой строке:
using (var transaction = _context.Database.BeginTransaction())
потому что мой экземпляр DbContext уже имеет транзакцию.
Есть ли способ проверить существование текущей транзакции?