Entity Framework を使用して、さまざまなエンティティでいくつかの変更/挿入を行うメソッドがあり、これらすべてが単一のトランザクション スコープ内にあります。これらの変更は非常にうまく機能します。
私の問題は、これらの操作の途中でストアド プロシージャを使用する必要が生じたときに始まりました。このプロシージャは、1 つのテーブルへの挿入のみを行い、トランザクションの明示的な宣言は行いません。トランザクションを宣言してコミットしようとしましたが、問題は同じでした。
トランザクション スコープ内で Entity Framework (EF1) からストアド プロシージャを呼び出すことはできませんか?
この例外は、使用中のブロックが閉じられたときに、transaction.Complete() の後でのみスローされます。
The transaction has aborted.
at System.Transactions.TransactionStatePromotedAborted.PromotedTransactionOutcome(InternalTransaction tx)
at System.Transactions.TransactionStatePromotedEnded.EndCommit(InternalTransaction tx)
at System.Transactions.CommittableTransaction.Commit()
at System.Transactions.TransactionScope.InternalDispose()
at System.Transactions.TransactionScope.Dispose()
内部例外:
The transaction operation cannot be performed because there are pending requests working on this transaction.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlDelegatedTransaction.SinglePhaseCommit(SinglePhaseEnlistment enlistment)
更新: 報奨金を開始しました
今日、Entity Framework を介してこのプロシージャ コールを行うことはもうありません。私は ADO.net を介して手順を呼び出しています。これが私の回避策でした。しかし、問題は続きます。近い将来、おそらくトランザクション スコープ内でいくつかの呼び出しを行う必要があります。