EFCore продвигает весь TransactionScope с единственным dbcontext в DTC - PullRequest
0 голосов
/ 20 марта 2020

У меня есть asp. net webapi (EFCore on. NET Framework), где я получаю команды и делаю это: (UnitOfWork - это InstancePerRequest в контейнере Io C)

private void HandleInTransaction<TCommand>(TCommand command, ICommandHandler<TCommand> handler) where TCommand : Commands.Command
{
    using (var transactionScope = new TransactionScope())
    {
        handler.Handle(command);
        _unitOfWork.GetDbContext().SaveChanges();
        transactionScope.Complete();
    }
}

Теперь моя статистика DT C доказывает, что этот ВСЕГДА переводит транзакцию в DT C, даже если Handle () часто содержит только одну команду sql для одного DbContext.

И когда Я делаю это:

private void HandleInTransaction<TCommand>(TCommand command, ICommandHandler<TCommand> handler) where TCommand : Commands.Command
{
    // first call to dbcontext instance inside a TransactionScope will promote to DTC, so ...
    var areYouKiddingMe = _unitOfWork.GetDbContext().GetQueryable<Formula>().First();
    using (var transactionScope = new TransactionScope())
    {
        handler.Handle(command);
        _unitOfWork.GetDbContext().SaveChanges();
        transactionScope.Complete();
    }
}

... работает без DT C.

Итак:

  • Почему это происходит? EFCore не генерирует мою БД, так что же тогда делает, что вызывает повышение?
  • Если это неизбежное зло, у вас есть предложение сделать это , прогревая dbcontext без делать фактический запрос?

спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...