के बिना एक ही सर्वर पर एकाधिक डेटाबेस (डेटाकॉन्टेक्स्ट) मैं SQL Server 2008 के साथ EF5.0 का उपयोग कर रहा हूं। मेरे पास एक ही सर्वर उदाहरण पर दो डेटाबेस हैं। मुझे दोनों डेटाबेस पर टेबल अपडेट करने की आवश्यकता है और उन्हें एक ही लेनदेन करना चाहते हैं। तो मैंने ट्रांज़ेक्शनस्कोप का इस्तेमाल किया। नीचे कोड है -एमएस डीटीसी
public void Save()
{
var MSObjectContext = ((IObjectContextAdapter)MSDataContext).ObjectContext;
var AWObjectContext = ((IObjectContextAdapter)AwContext).ObjectContext;
using (var scope = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadUncommitted
}))
{
MSObjectContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
AWObjectContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
scope.Complete();
}
}
जब मैं उपरोक्त कोड का उपयोग करता हूं लेनदेन को डीटीसी में पदोन्नत किया जाता है। इंटरनेट पर खोज करने के बाद मैंने पाया कि यह दो अलग-अलग कनेक्शनस्ट्रिंग/कनेक्शन के कारण होता है। लेकिन मैं समझ नहीं पा रहा हूं कि अगर मैं एक डेटाबेस पर संग्रहीत प्रक्रिया लिखता हूं जो एक अलग डेटाबेस (उसी सर्वर पर) तालिका को अद्यतन करता है तो कोई डीटीसी आवश्यक नहीं है। तो क्यों ईएफ या लेनदेनस्कोप इसे डीटीसी को बढ़ावा दे रहा है? क्या इसके लिए कोई और काम है?
बताएं पहले से
धन्यवाद
साई
मैं प्रतिबद्ध करने के लिए चाहते हैं एक लेनदेन के दायरे के तहत एक ही सर्वर पर दो पूरी तरह से अलग डीबीएस पर लेनदेन। मैं संग्रहीत प्रक्रियाओं के माध्यम से ऐसा कर सकता हूं लेकिन ईएफ के माध्यम से नहीं। यद्यपि आपके उत्तर के लिए धन्यवाद। – Sai
मेरा उत्तर दिखाता है कि संग्रहीत प्रोसेस का उपयोग किए बिना ऐसा करने के लिए 'ट्रांज़ेक्शनस्कोप' का उपयोग कैसे करें। अंतर्निहित 'tx.Dispose()' जो 'tx.Complete()' लाइन के बाद होता है, वह एकल लेनदेन करेगा जो INSERT दोनों को दो अलग-अलग डेटाबेस में शामिल करता है। जैसा कि बताया गया है, ईएफ के साथ कनेक्शन प्रदान करने के तरीके हैं जहां आपने मैन्युअल रूप से 'चेंजडेटाबेस()' कहा है, लेकिन आपके कोड बेस के आधार पर, जिसके परिणामस्वरूप अधिक कठोर युग्मित कोड हो सकता है (जबकि 'ट्रांज़ेक्शनस्कोप' बिंदु को डीक्यूपल करना है) केवल आप ही बता सकते हैं। –
मुझे नहीं लगता कि मैं चेंजडेटाबेस() का उपयोग कर सकता हूं क्योंकि मैं डेटाबेसफर्स्ट दृष्टिकोण का उपयोग कर रहा हूं और मेरा डीबीकोनटेक्स्ट कसकर इकाइयों से जुड़ा हुआ है। अगर मैं रनटाइम पर कनेक्शनस्टिंग को पूरी तरह से अलग डेटाबेस में बदलता हूं, तो यह त्रुटि फेंक देगा। – Sai