2010-03-02 20 views
5

क्या यह सिस्टम का उपयोग करने लायक है। लेनदेन। लिंक पर इकाइयों पर ट्रांसक्रिप्शनस्कोप?सी # लेनदेनस्कोप - एल 2 ई

MS documentation पर, यह कहता है कि ऑब्जेक्ट कॉन्टेक्स्ट के भीतर एसक्यूएल कॉल। सेव चेंज() सभी आंतरिक रूप से एक लेनदेन में घुमाए गए हैं।

हमारे पास 1 डेटाबेस कनेक्शन है, जो फ़ाइल सिस्टम पर एक स्थानीय SQLite डेटाबेस है। हम सिर्फ यह सुनिश्चित करना चाहते हैं कि डेटाबेस में हमारे सभी संचालन परमाणु हैं, क्या हमें लेनदेन की आवश्यकता है? आईई। जब हम कुछ हटाना, अपडेट, आवेषण इत्यादि के लिए बुलाते हैं, तो हम चाहते हैं कि वे सभी हों या कोई भी न हो।

उत्तर

3

जॉन, आपको ट्रांसएक्शनस्कोप का उपयोग करने की आवश्यकता नहीं है। आशावादी समेकन को लिंक द्वारा स्वचालित रूप से संभाला जाता है। आपके द्वारा प्रदान किए गए लिंक में कोड नमूना बताता है कि इसके बजाय, आपको लेन-देन वापस लेना नहीं है। मैं नमूना के समान कोड का उपयोग करूंगा:

try 
    { 
     // Try to save changes, which may cause a conflict. 
     int num = context.SaveChanges(); 
     Console.WriteLine("No conflicts. " + 
      num.ToString() + " updates saved."); 
    } 
    catch (OptimisticConcurrencyException) 
    { 
     // Resolve the concurrency conflict by refreshing the 
     // object context before re-saving changes. 
     context.Refresh(RefreshMode.ClientWins, orders); 

     // Save changes. 
     context.SaveChanges(); 
     Console.WriteLine("OptimisticConcurrencyException " 
     + "handled and changes saved"); 
    } 

ताज़ा करें, पुनः सहेजें, जो आपकी चिंता को संभालता है। आप कोशिश ब्लॉक के भीतर से अपवाद फेंक कर इसका परीक्षण कर सकते हैं।

बेस्ट सादर

1

आप एक ही लेन-देन में ObjectContext.SaveChanges की तुलना में अधिक शामिल करना चाहते हैं (उदाहरण के लिए डेटा आप बदलना करने जा रहे हैं, साथ ही परिवर्तन की पढ़ता है) तो आप TransactionScope का इस्तेमाल करते हैं की जरूरत है।

0

आप नीचे दिए गए कोड का उपयोग कर सकता है, तो आप क्या रिचर्ड कहते हैं ऐसा करने के लिए (हालांकि यह संभावना नहीं लगता है) की जरूरत है:

TransactionManager transactionManager = null; 

try 
{ 
    bool isBorrowedTransaction = ConnectionScope.Current.HasTransaction; 
    transactionManager = ConnectionScope.ValidateOrCreateTransaction(true); 

    //MANY SAVES 

    if (!isBorrowedTransaction && transactionManager != null && transactionManager.IsOpen) 
     transactionManager.Commit(); 
} 
catch (Exception ex) 
{ 
    if (transactionManager != null && transactionManager.IsOpen) 
     transactionManager.Rollback(); 
    log.Error("An unexpected Exception occurred", ex); 
    throw; 
} 
संबंधित मुद्दे