2009-05-28 14 views
14

मैं एकाधिक तालिकाओं में एकाधिक पंक्तियों को सम्मिलित करने के लिए एक लेनदेन का उपयोग कर रहा हूं। इन पंक्तियों के लिए मैं इन पंक्तियों को क्रम में जोड़ना चाहता हूं। SaveChanges को कॉल करने पर सभी पंक्तियां क्रम से बाहर डाली जाती हैं।पंक्ति सम्मिलन आदेश इकाई ढांचा

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

+1

एसक्यूएल डेटाबेस में सम्मिलन का आदेश क्यों मायने रखता है? –

+5

सम्मिलन का आदेश कोई फर्क नहीं पड़ता, हालांकि प्राथमिक कुंजी का क्रम करता है। – Wouter

उत्तर

9

एंटीटी फ्रेमवर्क में ऑर्डर आवेषण/अद्यतन और हटाए गए हैं, इकाई फ्रेमवर्क में कई चीजों पर निर्भर है।

उदाहरण के लिए यदि आप एक नई श्रेणी में कोई नया उत्पाद डालते हैं तो हमें उत्पाद से पहले श्रेणी जोड़नी होगी।

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

आदेश पर आप जो आदेश करते हैं वह आदेश इन नियमों के साथ संघर्ष में हो सकता है। उदाहरण के लिए यदि आप ऐसा करते हैं:

ctx.AddToProducts(
    new Product{ 
     Name = "Bovril", 
     Category = new Category {Name = "Food"} 
    } 
); 

प्रभाव है कि उत्पाद (संदर्भ के लिए) जोड़ा जाता है और फिर हम श्रेणी से भी जोड़ जब हम ग्राफ चलना है।

संदर्भ में डालने के क्रम यानी है:

Product 
Category 

लेकिन क्योंकि रेफेरेंन्शिअल सत्यनिष्ठा की कमी की हम फिर से आदेश चाहिए इस तरह डेटाबेस में डालने के लिए प्रयास करने से पहले:

Category 
Product 

तो यह स्थानीय पुन: आदेश की तरह गैर-विचारणीय है।

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

हालांकि हम हाल ही में इस पर बहस कर रहे थे, इसलिए मैं यह देखने के लिए उत्सुक हूं कि यह आपके लिए कितना महत्वपूर्ण है?

आशा इस

एलेक्स

कार्यक्रम प्रबंधक इकाई की रूपरेखा टीम

+0

स्पष्टीकरण के लिए धन्यवाद। यह निश्चित रूप से मुझे कुछ समय बचाएगा यदि यह समर्थित था, लेकिन मुझे लगता है कि मैं एक ही प्रभाव प्राप्त करने के लिए अपनी खुद की कस्टम प्राथमिक कुंजी भी उत्पन्न कर सकता हूं। – Wouter

+0

नीचे दिए गए प्रश्न के कुछ अन्य प्रतिक्रियाएं हैं। मैं टाइमस्टैम्प पर आदेश देकर या प्राथमिक कुंजी के बजाय क्या नहीं कर रहा था। – Wouter

+3

इस पर कोई अपडेट? मेरे पास एक situtation है जहां मेरी टेबल एक वैकल्पिक कुंजी पर बाधा है, तो मॉडल पर कोई दृश्य संबंध नहीं है। (एके उपयोगकर्ता आईडी के बजाय उपयोगकर्ता नाम है)। तो मैं अब तक आवेषण का क्रम कैसे बदल सकता हूं, जब मैं उपयोगकर्ता जोड़ता हूं और फिर उपयोगकर्ता को समूह में जोड़ता हूं, तो savechanges विफल हो जाता है। – hazimdikenli

1

मैं इस पुल को पार करने की प्रक्रिया में हूँ मदद करता है। मैं एनएफबर्ननेट को ईएफ के साथ बदल रहा हूं और जिस मुद्दे पर मैं दौड़ रहा हूं वह यह है कि डीबी में सूचियां कैसे डाली जाती हैं। यदि मैं इस तरह की सूची में आइटम जोड़ता हूं (pseduo कोड में):

सूची। जोड़ें (testObject); सूची। जोड़ें (testObject1);

मुझे वर्तमान में 'SaveChanges' चलाने पर एक ही आदेश प्राप्त करने की गारंटी नहीं है। यह शर्म की बात है क्योंकि मेरी सूची वस्तु (यानी लिंक्ड सूची) उस क्रम को जानता है जिसे वह बनाया गया था। संदर्भों का उपयोग करके एक साथ बंधे ऑब्जेक्ट्स को उसी क्रम में डीबी में सहेजा जाना चाहिए। निश्चित नहीं है कि आपने क्यों उल्लेख किया है कि आप इसे "बहस" कर रहे हैं। =)

+0

यह सुनिश्चित नहीं है कि जब आप यहां जवाब देंगे तो वह नोटिस करेगा, आपको शायद उसके उत्तर पर भी टिप्पणी करनी चाहिए – Wouter

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