我不能在事务范围内调用Entity Framework中的存储过程吗?

Vic*_*ues 7 stored-procedures entity-framework transactionscope

我有一个方法,使用实体框架在不同的实体中进行一些更改/插入,所有这些都在一个事务范围内.这些变化非常有效.

当我需要在这些操作中使用存储过程时,我的问题就开始了.该过程仅在一个表中进行插入,并且没有明确的事务声明.我已经尝试过声明一个事务并在那里提交,但问题是一样的.

我不能在事务范围内调用实体框架(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()
Run Code Online (Sandbox Code Playgroud)

内部异常:

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)
Run Code Online (Sandbox Code Playgroud)

更新:开始赏金

今天我不再通过实体框架进行此过程调用了.我正在通过ADO.net调用该过程,这是我的解决方法.但问题仍然存在,我应该在不久的将来进行一些调用,可能在事务范围内.

小智 18

我终于找到了一个解决方案......似乎EF期望存储过程(导入的函数)返回一个值.所以在函数返回时调用.FirstOrDefault().


gbn*_*gbn 2

hotifx 的错误?知识库 936983