मेरा मानना है कि - लेकिन मुझे यकीन नहीं कर रहा हूँ - "रिवर्स संघ को सिंक्रनाइज़" के साथ आप इकाई की रूपरेखा में एक सुविधा है जो रिश्ता कहा जाता फिक्स-अप या रिश्ता स्पैन और आवंटित करने के लिए जिम्मेदार है मतलब ऑब्जेक्ट कॉन्टेक्स्ट में ऑब्जेक्ट्स के बीच स्वचालित रूप से नेविगेशन गुण। यह ईएफ 4.1 के लिए विशिष्ट नहीं है लेकिन पुराने संस्करणों के लिए भी मौजूद है।
मैं इस सुविधा के लिए एक व्यापक प्रलेखन पता नहीं है लेकिन यहां पर कुछ संसाधनों जो थोड़ा अधिक जानकारी दे सकते हैं - विशेष रूप से एक दूसरे:
संपादित
मैं संबंध अवधि और उसके सभी प्रभावों के लिए एक व्यापक स्पष्टीकरण देने में सक्षम नहीं हूँ।
answer you have linked in the comment मोर्तेज़ा में संस्थाओं के बीच एक अंतर जो एफई 4.0 में EntityObject
(केवल ObjectContext
से प्राप्त कर रहे, के साथ संभव नहीं बनाता है: लेकिन मुझे लगता है मैं क्या कहते हैं कुछ उदाहरण हैं, जहां मैं सुरक्षित है कि यह पूरी तरह से गलत नहीं है महसूस देने के लिए कोशिश कर सकते हैं ईएफ 4.1 में DbContext
) और पीओसीओ (ObjectContext
और DbContext
के साथ संभव)।
यदि आपके पास पीओसीओ है तो किसी अन्य ऑब्जेक्ट के नेविगेशन संग्रह में एक नया ऑब्जेक्ट जोड़ना जो पहले ही संदर्भ में लोड हो चुका है संदर्भ में नई ऑब्जेक्ट को संलग्न नहीं करेगा। यह आश्चर्य की बात नहीं है क्योंकि पीओसीओ हैं, ठीक है ..., पीओसीओ, जिसका मतलब है कि वे ईएफ संदर्भ के बारे में कुछ भी नहीं जानते हैं। एक नेविगेशन संग्रह में ऑब्जेक्ट जोड़ना वास्तव में List<T>.Add(...)
जैसे कुछ भी नहीं है। यह जेनेरिक Add
विधि ईएफ संदर्भ पर कोई भी संचालन नहीं करती है।
यह EntityObject
और EntityCollection
के साथ एक और स्थिति है, दोनों में आंतरिक रूप से संदर्भ के संदर्भ हैं और इसलिए जब आप संग्रह में जोड़ते हैं तो तत्काल संदर्भ से संलग्न हो सकते हैं। इस विचार से
एक निष्कर्ष यह है कि अपने प्रश्न में पिछले कोड उदाहरण नहीं वास्तव में Blog
संपत्ति Post
में स्थापित करेगा जब आप Pocos का उपयोग करें।लेकिन: आपको DetectChanges
या SaveChanges
(जिसे DetectChanges
आंतरिक रूप से कॉल किया गया है) के बाद सेट किया जाएगा। इस स्थिति में DetectChanges
(जो शायद एक बहुत ही जटिल विधि है) संदर्भ में दिखता है कि कौन सी वस्तुएं हैं (इसे Blog
पैरेंट ऑब्जेक्ट मिलेगा) और फिर पूरे ऑब्जेक्ट ग्राफ़ (Posts
हमारे मामले में संग्रह) के माध्यम से चलता है और जांचता है कि क्या ग्राफ में अन्य ऑब्जेक्ट्स (Post
ऑब्जेक्ट्स) संदर्भ में भी हैं। यदि नहीं - और यह आपके उदाहरण में मामला है - यह उन्हें Added
स्थिति में संदर्भ में संलग्न करेगा और - अब रिश्ते अवधि अब खेल में आता है - ऑब्जेक्ट ग्राफ़ में नेविगेशन गुणों को भी ठीक करें।
एक और स्थिति जहां संबंध अवधि भी पीओसीओ के साथ कार्य करती है जब आप संदर्भ में वस्तुओं को लोड करते हैं।
उदाहरण के लिए: आप के साथ आईडी = एक्स एक Blog
और आईडी के साथ एक Post
= y जो डेटाबेस तो इस कोड में इस Blog
के अंतर्गत आता है ... है, तो
var blog = context.Blogs.Find(x); // no eager loading of the Posts collection!
var post = context.Posts.Find(y); // no eager loading of the Blog property!
स्वचालित रूप से नेविगेशन का निर्माण होगा प्रत्येक ऑब्जेक्ट में गुण, Posts
Blog
का संग्रह अचानक पोस्ट और Blog
Post
में संपत्ति ब्लॉग को संदर्भित करेगा। यह रिलेशनशिप फिक्स-अप इस तथ्य पर निर्भर करता है कि वस्तुओं को संदर्भ में वास्तव में लोड किया जाता है। आप AsNoTracking
उदाहरण के लिए का उपयोग करके इस को दबाने के हैं ...
var blog = context.Blogs.AsNoTracking().Where(b => b.Id == x).Single();
var post = context.Posts.AsNoTracking().Where(p => p.Id == y).Single();
... संबंध अवधि काम नहीं करता है और नेविगेशन गुण null
रहना होगा।
एक आखिरी नोट: रिलेशनशिप अवधि - उपर्युक्त उदाहरण में - केवल तभी काम करता है जब कम से कम एक छोर पर आक्रमण में 0...1
(एक-से-एक या एक से कई संगठन) की कार्डिनालिटी हो। यह कई से कई संगठनों के लिए कभी काम नहीं करता है। हाल ही में इस पर चर्चा की गई थी (ईएफ 4.1 के साथ): EF 4.1 loading filtered child collections not working for many-to-many
धन्यवाद स्लैमा, मैंने पहले रिलेशनशिप अवधि के बारे में नहीं सुना था। इससे इस व्यवहार के बारे में सामग्री खोजने में बहुत मदद मिली है। अपने लिंक पढ़ने और अन्य जानकारी के लिए खोज करने के बाद, मैं इस SO उत्तर में आया: http://goo.gl/4j888। मोर्टेजा कह रहा है कि रिलेशनशिप स्पैन कोड-पहले में समान काम नहीं करता है। अनिश्चित ... –
@ सेन Kearon: अब मेरे जवाब में एक संपादन है। (मैं केवल एक संक्षिप्त टिप्पणी लिखना चाहता था, लेकिन यह लंबा और लंबा हो रहा था।) – Slauma
स्लुमा, वापस पाने के लिए और व्यवहार के बारे में इस तरह के एक व्यापक उत्तर के लिए धन्यवाद। –