Использование транзакций и TransactionScopes с Entity Framework Core 2.1 и dbcontext - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь создать зависимые транзакции в Entity Framework Core (v. 2.1).

Идея состоит в том, чтобы создать "дочерние" транзакции внутри "родительской" транзакции.
Если один из детей потерпит неудачу, значит, будет и отец.

Я пробовал с TransactionScope, но у меня появляется следующая ошибка.

Предупреждение как исключение ошибки для предупреждения «Microsoft.EntityFrameworkCore.Database.Transaction.AmbientTransactionWarning»: обнаружена внешняя транзакция.Entity Framework Core не поддерживает внешние транзакции.См. http://go.microsoft.com/fwlink/?LinkId=800142. Чтобы подавить это исключение, используйте API DbContextOptionsBuilder.ConfigureWarnings.ConfigureWarnings можно использовать при переопределении метода DbContext.OnConfiguring или использовании AddDbContext в поставщике службы приложений.

Следующие методы являются методами контроллера, dbcontext создается и инициализируется в конструкторе контроллера

Вот мой код:

public bool father()
    {
        using (var transaction = new TransactionScope(TransactionScopeOption.Required))
        {
            try
            {
                //Do Stuff with the dbcontext 
                //(read, as "var x1 = _dbcontext.Database.Table1; etc...")...
                child();
                transaction.Complete();
                //Do Stuff...
            }
            catch
            {
                //Do Stuff...
                transaction.Dispose();
                //Do Stuff...
            }
        }
    }
}
public bool child()
    {
        using (var transaction2 = new TransactionScope(TransactionScopeOption.Required))
        {
            try
            {
                //Do other stuff with the dbcontext
                //(read, as "var x2 = _dbcontext.Database.Table2; etc...")...
                transaction2.Complete();
                //Do Stuff...
            }
            catch
            {
                //Do Stuff...
                transaction2.Dispose();
                //Do Stuff...
            }
        }
    }
}

Как я могу заставить его работать?

...