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