मैं हाल ही में एंटीटी फ्रेमवर्क 4 के साथ काम कर रहा हूं, और ObjectSet.Attach, और ObjectSet.AddObject का उपयोग करने के लिए थोड़ा उलझन में हूं।इकाई फ्रेमवर्क 4 - AddObject बनाम संलग्न
मेरी समझ से:
- "अटैच करें" जब एक इकाई पहले से प्रणाली
- उपयोग "AddObject" में मौजूद है जब एक नया इकाई बनाने
तो, अगर मैं 'का उपयोग एम एक नया व्यक्ति बनाना, मैं यह करता हूं।
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
तो मैं हूँ एक मौजूदा व्यक्ति को संशोधित करने, मैं यह नहीं:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
ध्यान रखें, यह एक बहुत ही सरल उदाहरण है। हकीकत में मैं शुद्ध पोको (कोई कोड पीढ़ी) का उपयोग नहीं कर रहा हूं, रिपोजिटरी पैटर्न (सीटीएक्स.पर्सन से निपटें नहीं), और कार्य इकाई (सीटीएक्स सेव करें। सेव चेंज)। लेकिन "कवर के तहत", उपरोक्त मेरे कार्यान्वयन में क्या होता है।
अब, मेरे सवाल का - मैं अभी तक एक परिदृश्य में जहाँ मैं उपयोग करने के लिए संलग्न पड़ा है खोजने के लिए कर रहा हूँ।
मुझे यहां क्या याद आ रही है? हमें अटैच का उपयोग करने की आवश्यकता कब होती है?
संपादित
बस स्पष्ट करने के लिए, मैं उदाहरण जब AddObject (या इसके विपरीत) से अधिक संलग्न उपयोग करने के लिए की की तलाश में हूँ।
संपादित 2
नीचे जवाब सही है (जो मैं स्वीकार किए जाते हैं), लेकिन सोचा था कि मैं एक और उदाहरण है, जहां उपयोगी होगा संलग्न जोड़ना होगा।
के लिए मेरे उपरोक्त उदाहरण में मौजूदा व्यक्ति संशोधित करने के लिए, दो प्रश्न वास्तव में निष्पादित किए जा रहे हैं।
व्यक्ति (.SingleOrDefault) को पुनर्प्राप्त करने के लिए, और दूसरा अद्यतन (.SaveChanges) करने के लिए।
अगर (किसी कारण से), मुझे पहले से ही पता था कि "जो ब्लॉग्स" सिस्टम में मौजूद था, तो उसे पहले पाने के लिए अतिरिक्त पूछताछ क्यों करें? मैं यह कर सकता था:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
इसके परिणामस्वरूप केवल एक अपडेट स्टेटमेंट निष्पादित किया जा रहा है।
संलग्नक एमवीसी में अब भी उपयोग किया जाता है जब मॉडलों को सीधे ईएफ पर वापस रखा जाता है। बहुत अच्छी तरह से काम करता है और कोड लाइनों का एक टन बचाता है। – ppumkin