Соединение закрывается при выполнении отката транзакций на Mysql с Entity Framework 6 и поставщиком Devart

c# devart entity-framework-6 mysql transactions

Вопрос

Я работаю над проектом, который использует Entity Framework 6 RC для подключения к базе данных Mysql с поставщиком Devart (v7.8.322.0).

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

Мы сами не начинаем никаких транзакций.

Это stacktrace исключения:

    System.InvalidOperationException: Connection must be opened.
      at Devart.Common.Utils.CheckConnectionOpen(IDbConnection connection)
   at Devart.Data.MySql.MySqlConnection.Rollback()
   at Devart.Data.MySql.MySqlTransaction.Dispose(Boolean disposing)
   at System.Data.Common.DbTransaction.Dispose()
   at System.Data.Entity.Core.EntityClient.EntityTransaction.Dispose(Boolean disposing)
   at System.Data.Common.DbTransaction.Dispose()
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy)
   at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass28.<SaveChanges>b__25()
   at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options)
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
   at System.Data.Entity.DbContext.SaveChanges()
   at Nallian.Dal.MySql.NallianDbContext.Nallian.Data.Common.Contracts.IUnitOfWork.SaveChanges() in c:\TFS2012\Nallian\Main\Nallian.Dal.MySql\NallianDbContext.cs:line 117
   ...

Еще страннее то, что когда я использую инструмент devart dbmonitor, я вижу, что транзакция совершается.

Я посмотрел в открытый исходный код Entity Framework и в ObjectContext.ExecuteInTransaction. Я вижу вызов ReleaseConnection () в общем catch. В этом методе соединение закрывается, если определено, что его больше никто не использует. Но в последнем блоке транзакция удаляется (ака откат).

Поэтому я немного потерялся здесь. Может ли кто-нибудь помочь мне в этом?

Thx, Стивен.

ОБНОВЛЕНИЕ Я создаю небольшой тестовый проект с RTM EF6 и последней версией поставщика Devart 8.0.17, но с тем же результатом, что и выше.

Я также указал свой тестовый проект на SqlServer Express и там он отлично работает. Поэтому я думаю, что я должен начать смотреть на поставщика Devart.

Принятый ответ

Я загрузил новую версию 8.1.45 Devart DotConnect, и это решило проблему полностью. Теперь мои транзакции получают откат, если какой-либо запрос в них получает ошибку. И я получаю правильное исключение в своей EF6 Executionstrategy.

Поэтому проблема решена. Thx Devart. :)


Популярные ответы

Исправлена ​​ошибка, связанная с ошибкой «Соединение должна быть открыта» при откате транзакции, если соединение уже закрыто.

Выпущена новая версия dotConnect для MySQL 8.1. Он может быть загружен отсюда (пробная версия) или из области зарегистрированных пользователей (только для пользователей с активной подпиской). Для получения дополнительной информации, пожалуйста, обратитесь к нашему форуму .




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему