2009-07-01 15 views
9
string[] usersToAdd = new string[] { "asd", "asdert", "gasdff6" }; 
using (Entities context = new Entities()) 
{ 
    foreach (string user in usersToAdd) 
    { 
     context.AddToUsers(new User { Name = user }); 
    } 
    try 
    { 
     context.SaveChanges(); //Exception thrown: user 'gasdff6' already exist. 
    } 
    catch (Exception e) 
    { 
     //Roll back all changes including the two previous users. 
    } 

या शायद यह स्वचालित रूप से किया जाता है, जिसका अर्थ है कि अगर त्रुटि होती है, तो सभी परिवर्तनों के लिए परिवर्तन करना रद्द कर दिया जाता है। है ना?एंटिटी फ्रेमवर्क

उत्तर

12

ठीक

मैं एक नमूना प्रश्न और समापन मैं डीबी में जाँच की और कोई उन से उदाहरण की तरह एक आवेदन जोड़ा गया था बनाया।

निष्कर्ष: ऑब्जेक्ट कॉन्टेक्स्ट। सहेजें बदलें यह स्वचालित रूप से एक लेनदेन है।

नोट: मेरा मानना ​​है कि लेनदेन है कि क्या आवश्यकता होगी अगर क्रियान्वित sprocs आदि

+0

हाँ यह सही है –

8

मुझे विश्वास है (लेकिन मैं ईएफ में लंबे समय तक विशेषज्ञ नहीं हूं) कि जब तक संदर्भ के लिए कॉल नहीं किया जाता है। सेव चेंजिस गुजरता है, लेनदेन शुरू नहीं होता है। मुझे उम्मीद है कि उस कॉल से एक अपवाद स्वचालित रूप से शुरू होने वाले किसी लेनदेन को रोलबैक करेगा। विकल्प (यदि आप लेनदेन के नियंत्रण में रहना चाहते हैं) [J.Lerman's "Programming Entity Framework" O'Reilly, पृष्ठ। 618]

using (var transaction = new System.Transactions.TransactionScope()) 
{ 
    try 
    { 
    context.SaveChanges(); 
    transaction.Complete(); 
    context.AcceptAllChanges(); 
    } 
    catch(OptimisticConcurrencyException e) 
    { 
    //Handle the exception 
    context.SaveChanges(); 
    } 
} 

या

bool saved = false; 
using (var transaction = new System.Transactions.TransactionScope()) 
{ 
    try 
    { 
    context.SaveChanges(); 
    saved = true; 
    } 
    catch(OptimisticConcurrencyException e) 
    { 
    //Handle the exception 
    context.SaveChanges(); 
    } 
    finally 
    { 
    if(saved) 
    { 
     transaction.Complete(); 
     context.AcceptAllChanges(); 
    } 
    } 

} 
+0

"मुझे विश्वास है"? – Shimmy

+0

संक्षेप में, मेरा मानना ​​है कि आपको सरल परिदृश्य में लेन-देन रोलबैक मुफ्त में मिलता है, और आपको अधिक जटिल परिदृश्यों के लिए दो उदाहरणों में प्रदर्शित लेनदेन को संभालने की आवश्यकता होगी। आपका नमूना ऐप इसकी पुष्टि करने लगता है। क्षमा करें अगर मेरा शब्द तारकीय से कम था - जब मैंने कल लिखा था तो मीटिंग्स के बीच था। – FOR

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