2012-07-29 12 views
24

संभव डुप्लिकेट:
Entity Framework 4 - AddObject vs Attachएंटिटी फ्रेमवर्क में अटैच() क्या करता है?

मैं कई बार देते हैं के उपयोग देखा है, खासकर जब मॉडल से छेड़छाड़।

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 
संदर्भ से

की तरह यह सिर्फ EntityFrameworks में एक रिकॉर्ड के खिलाफ एक UPDATE चलाता है, लेकिन मैं भी यह DELETE बयान में इस्तेमाल देखें कि यह लग रहा है। तो मैं केवल यह मान सकता हूं कि यह डेटाबेस के लिए एक सूचक हो जाता है?

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

+0

सी [इस सवाल] (http://stackoverflow.com/q/3920111/406903) और 'अटैच' और 'AddObject' के बारे में उत्तर स्वीकार किया गया। – hmqcnoesy

+1

धन्यवाद @hmqcnoesy उस चूक गए :) डुप्लिकेट के रूप में बंद करने के लिए मतदान किया। –

उत्तर

36

बस के रूप में कोड ब्याज की एक बिंदु आपने पोस्ट किया है कुछ नहीं करता है

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

यह सब करता है पर नज़र रखने के ग्राफ को इकाई संलग्न संस्था के लिए कोई संशोधन करने और इसे बचाने के लिए है।

किसी भी वस्तु के पहले अनुलग्न में अनदेखी कर रहे हैं करने के लिए बनाया बचाने परिवर्तन

यदि यह वास्तव में एक संपत्ति यानी अद्यतन अधिक रूचिकर है होगा:

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    client.Name = "Bob"; 
    context.SaveChanges(); 
} 
+1

दिलचस्प, मुझे लगता है कि यह संलग्न होने के बाद ही बदलता है। एक छोटे टेंगेंट के लिए खेद है, क्या आपके पास मौजूदा रिकॉर्ड को संपादित करने का एक अच्छा साफ तरीका है जिसमें आपके पास पहले से ही एक संशोधित वर्ग है (जहां आईडी समान है)? "सब कुछ बदल गया है" विधि का क्रमबद्ध करें? –

+1

यह परिवर्तन ट्रैकिंग विधि पर थोड़ा सा निर्भर करता है लेकिन स्नैपशॉट ट्रैकिंग (जिसे आप लगभग निश्चित रूप से उपयोग कर रहे हैं) के साथ ऐसा करने का सबसे अच्छा तरीका यह है कि यह कैसे करें इसे करने के तरीके पर इकाई ladislav स्पर्श पर गंदा ध्वज सेट करके http: // stackoverflow.com/a/6829996/1070291 लेकिन आप शायद इसे इकाई पर करना चाहते हैं गुण नहीं –

+18

@JohnMitchell एक मौजूदा इकाई संलग्न करने के बाद आप इसके बदले गए राज्य को संशोधित करने के लिए सेट कर सकते हैं, उदाहरण के लिए 'context.Entry (क्लाइंट) .State = EntityState.Modified; ' – devlord

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