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 ツールを使用すると、トランザクションがコミットされていることがわかります。

Entity Framework のオープン ソース コードを調べたところ、ObjectContext.ExecuteInTransaction で、一般的なキャッチに ReleaseConnection() の呼び出しが表示されました。その方法では、誰もそれを使用していないと判断された場合、接続は閉じられます。しかし、finally ブロックでは、トランザクションが破棄されます (別名ロールバック)。

だから私はここで少し迷っています。誰でもこれで私を助けることができますか?

ありがとう、スティーブン。

更新 EF6 の RTM と最新バージョンの Devart プロバイダー 8.0.17 を使用して小さなテスト プロジェクトをビルドしますが、上記と同じ結果になります。

また、テスト プロジェクトを SqlServer Express に指定したところ、完全に動作しました。そのため、Devart プロバイダーを検討する必要があると思います。

4

2 に答える 2

0

接続が既に閉じられている場合にトランザクションをロールバックする際の「接続が開かれている必要があります」というエラーに関連するバグが修正されました。

dotConnect for MySQL 8.1 の新しいバージョンがリリースされました。ここから(試用版) または登録ユーザー エリア (アクティブなサブスクリプションをお持ちのユーザーのみ)からダウンロードできます。詳細については、フォーラムを参照してください

于 2013-11-01T06:49:22.353 に答える