0

我正在开发一个项目,该项目使用 Entity Framework 6 RC 通过 Devart 提供程序(v7.8.322.0)连接到 Mysql 数据库。

但是现在我遇到一个问题,当查询失败时,事务的回滚失败,因为连接被关闭了。

我们自己并没有开始任何交易。

这是异常的堆栈跟踪:

    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 工具时,我看到事务被提交。

我查看了实体框架开源代码,在 ObjectContext.ExecuteInTransaction 中我看到了对 ReleaseConnection() 的调用。在该方法中,如果确定没有人再使用它,则连接将关闭。但是在 finally 块中,事务被处理(又名回滚)。

所以我在这里有点迷失了。有人可以帮我吗?

谢谢,史蒂文。

更新 我使用 EF6 的 RTM 和最新版本的 Devart 提供程序 8.0.17 构建了一个小型测试项目,但结果与上述相同。

我还将我的测试项目指向了 SqlServer Express,它在那里完美运行。所以我想我必须开始关注 Devart 提供商。

4

2 回答 2

0

我下载了 Devart DotConnect 的新版本 8.1.45,这已经完全解决了这个问题。现在,如果其中的任何查询出错,我的事务就会回滚。我在我的 EF6 执行策略中得到了正确的异常。

所以问题解决了。谢谢德瓦特。:)

于 2013-11-30T19:44:29.693 回答
0

如果连接已关闭,则回滚事务时与“必须打开连接”错误相关的错误已修复。

新版本 dotConnect for MySQL 8.1 发布。可以从这里下载(试用版)或从注册用户区下载(仅限有效订阅的用户)。欲了解更多信息,请参阅我们的论坛

于 2013-11-01T06:49:22.353 回答