EF6: DbExecutionStrategy не обнаруживает пользовательские транзакции - PullRequest
0 голосов
/ 01 апреля 2020

Скопировано из GitHub - https://github.com/dotnet/ef6/issues/1615

Я использую EF 6.2 и у меня возникла проблема, связанная с использованием DbExecutingStrategy для повторные блокировки базы данных повтора.

В документации видно, что транзакции пользователя не поддерживаются. Однако я считаю, что фреймворк должен определять, когда они используются, и генерировать исключение. Это не происходит для меня.

Это известная ошибка в 6.2? Я посмотрел на этапы 6.3 и 6.4 и не вижу никаких закрытых проблем, решающих эту проблему.

Мой код выглядит следующим образом:

    using (var tran = this._devContext.Database.BeginTransaction())
    {
        this._devContext.Database.ExecuteSqlCommand(sql);
        tran.Rollback();
    }

В моем случае это тестовый код и выполнение SQL вызывает тупик. Что происходит, когда я использую DbExecutionStrategy , это то, что SQL успешно повторен, и он работает. Однако, когда вызывается tran.Rollback(), генерируется исключение, потому что повторная попытка проигнорировала пользовательскую транзакцию и зафиксировала запрос.

Вот исключение, которое возникает:

Message: Value cannot be null. Parameter name: connection
System.Data.Entity.Utilities.Check.NotNull[T](T value, String parameterName):14
System.Data.Entity.Infrastructure.Interception.DbTransactionInterceptionContext.WithConnection(DbConnection connection)
System.Data.Entity.Infrastructure.Interception.DbTransactionDispatcher.Rollback(DbTransaction transaction, DbInterceptionContext interceptionContext):50
System.Data.Entity.Core.EntityClient.EntityTransaction.Rollback()

Я бы ожидал, что EF идентифицирует пользовательскую транзакцию и выдаст исключение перед запуском SQL.

Обновление

Я повторил ту же проблему в EF 6.4

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