У меня есть 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 без делать фактический запрос?
спасибо!