2010-01-21 11 views
7

मेरे पास एक विधि है जो विभिन्न इकाइयों में कुछ बदलाव/आवेषण करने के लिए इकाई फ्रेमवर्क का उपयोग करती है, यह सब एक लेनदेन के दायरे में है। ये परिवर्तन बहुत अच्छी तरह से काम करता है।क्या मैं एक लेनदेन क्षेत्र के भीतर इकाई फ्रेमवर्क से संग्रहीत प्रक्रिया को कॉल नहीं कर सकता?

मेरी समस्या तब शुरू हुई जब मुझे इन परिचालनों के बीच में संग्रहीत प्रक्रिया का उपयोग करने की आवश्यकता थी। प्रक्रिया केवल एक तालिका में एक डालने है, और लेनदेन की कोई स्पष्ट घोषणा नहीं है। मैंने लेनदेन घोषित करने और वहां भी आने की कोशिश की है, लेकिन समस्या एक जैसी थी।

क्या मैं एक लेनदेन क्षेत्र के भीतर इकाई फ्रेमवर्क (ईएफ 1) से संग्रहीत प्रक्रिया को कॉल नहीं कर सकता?

यह अपवाद केवल लेनदेन के बाद फेंक दिया गया है। पूर्ण(), जब उपयोग ब्लॉक बंद हो जाता है।

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) 

अद्यतन: एक इनाम

शुरू किया आज मैं इकाई की रूपरेखा के माध्यम से इस प्रक्रिया कॉल अब और नहीं कर रहा हूँ। मैं एडीओनेट के माध्यम से प्रक्रिया को बुला रहा हूं, यह मेरा कामकाज था। लेकिन समस्या बनी हुई है, मुझे निकट भविष्य में कुछ लेनदेन के दायरे में कुछ कॉल करने की ज़रूरत है।

+0

अब तक, मैं संग्रहीत प्रक्रिया को सादे पुराने ado.net से कॉल कर रहा हूं, उसी डेटाबेस में एक और कनेक्शन स्ट्रिंग का उपयोग कर। –

उत्तर

18

मुझे अंत में एक समाधान मिला ... ऐसा लगता है कि ईएफ एक मूल्य वापस करने के लिए संग्रहीत प्रो (आयातित फ़ंक्शन) की अपेक्षा करता है। तो फ़ंक्शन पर FirstOrDefault() को कॉल करते समय कॉल करें।

+0

इससे मुझे भी मदद मिली। यह मूल्य वापस करने के बाद ठीक काम करता है (भले ही मैंने इसका उपयोग नहीं किया हो) – amhed

+1

यह समस्या को ठीक कर दिया गया है जिसे हम यहां भी मार रहे थे। यह एक ईएफ बग कैसे नहीं है? –

+0

+1 यह ईएफ 5 में होने वाली समस्या को ठीक करता है। धन्यवाद। – JohnnyHK

संबंधित मुद्दे

 संबंधित मुद्दे