2016-07-14 9 views
2

複雑なプロシージャを実行しようとしていて、エンティティフレームワークを使用してトランザクション内のテーブルにデータを保存しようとしています。コードがトランザクションをコミットすると、例外がスローされますエンティティフレームワークでトランザクションがコミットされない

このトランザクションで処理中の保留中の要求があるため、トランザクション操作を実行できません。

以下はコードです。

同じトランザクションで実行しているため、なぜ保留中の要求例外がスローされているのか分かりません。以下は

私は別の方法を見つけた

at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) 
    at System.Data.Entity.Infrastructure.Interception.DbTransactionDispatcher.Commit(DbTransaction transaction, DbInterceptionContext interceptionContext) 
    at System.Data.Entity.Core.EntityClient.EntityTransaction.Commit() 
    at System.Data.Entity.DbContextTransaction.Commit() 
    at BoomerangResellerAPI.DAL.ResellerCustomerFileDAL.DeleteFile(Int32 customerId, Int32 fileId, String& returnMessage) in D:\Varinder\Working Folder\Boomerang Backup\API\BoomerangResellerAPI\BoomerangResellerAPI\BoomerangResellerAPI.DAL\ResellerCustomerFileDAL.cs:line 325 
    at BoomerangResellerAPI.BLL.ResellerCustomerFileBLL.DeleteFile(Guid uniqueCustomerId, Int32 fileId, String& returnMessage) in D:\Varinder\Working Folder\Boomerang Backup\API\BoomerangResellerAPI\BoomerangResellerAPI\BoomerangResellerAPI.BLL\ResellerCustomerFileBLL.cs:line 100 
    at BoomerangResellerAPI.Controllers.FilesController.TemporaryDelete(Nullable`1 customerUniqueId, Nullable`1 fileId) in D:\Varinder\Working Folder\Boomerang Backup\API\BoomerangResellerAPI\BoomerangResellerAPI\BoomerangResellerAPI\Controllers\FilesController.cs:line 195 

答えて

0

完全なスタックトレースです。むしろ、その後

私は dbContext.Database.DbRawSqlQueryのようにそれを呼び出しています直接dbcontextからストアドプロシージャを呼び出します。今度は上記のすべてを次のようにしています。

  1. dbcontextの宣言と初期化。
  2. トランザクションの作成。
  3. 手順1で初期化されたコンテキストを使用してプロシージャを実行します。
  4. 同じddContexを使用してデータベースにレコードを保存します。
  5. dbContextからデータベースへの変更を保存します。
  6. トランザクションをコミットしています。

すべてのエンティティ(データベースに関連する)文がデフォルトでトランザクションで実行されるため、トランザクションを作成する必要はありません。それは読むことができるhere

関連する問題