2016-12-07 11 views
5

ईएफ के माध्यम से सीआरयूडी ऑपरेशन करने की सर्वोत्तम प्रथाओं की खोज करते समय मैंने देखा कि इकाई को अद्यतन करने से पहले Attach() या Find() विधियों का उपयोग करने की अत्यधिक अनुशंसा की जाती है। यह अच्छी तरह से काम करता है और ईएफ दस्तावेज के अनुसार ये विधियां इकाई को संदर्भ में लाती हैं जो मेरे लिए काफी स्पष्ट है। लेकिन फॉलोइंड कोड ने मुझे काफी परेशान कियाअद्यतन इकाई फ्रेमवर्क 6 के लिए अटैचमेंट का उपयोग क्यों करें?

public void Update(object entity) 
{ 
    Record record = new Record() { 
     id = 1, 
     value = 5 
    }; 
    using (SomeContext ctx = new SomeContext()) 
    { 
     ctx.Entry(record).State = EntityState.Modified; 
     ctx.SaveChanges(); 
    } 
} 

मान लें कि हमारे पास डेटाबेस में आईडी = 1 के साथ एक रिकॉर्ड है। इस स्थिति पर उपरोक्त कोड रिकॉर्ड अपडेट करेगा (मान को 5 पर सेट करें)। सवाल यह है कि यह क्यों काम करता है? और फिर मुझे Attach() का उपयोग क्यों करना चाहिए? जहां तक ​​मैं समझता हूं कि रिकॉर्ड किसी भी तरह से संदर्भ से जुड़ा नहीं था। मैंने this पुस्तक और the tutorial के प्रासंगिक अध्याय पढ़े लेकिन वे 2-क्वेरी-दृष्टिकोण का उपयोग करते हैं। इसके अलावा मैंने एसओ सर्फ किया लेकिन मुझे अपने प्रश्न पर जवाब नहीं मिला। कृपया स्पष्टीकरण या कुछ अच्छे माथेरियल के साथ मेरी मदद करें।

उत्तर

12

आप एक इकाई आप जानते हैं कि पहले से ही डेटाबेस में मौजूद है, लेकिन जो वर्तमान संदर्भ के रूप में अपने केस से ट्रैक नहीं हो तो आप DbSet पर Attach विधि का उपयोग कर इकाई को ट्रैक करने के संदर्भ बता सकते हैं। तो संक्षेप में Attach विधि संदर्भ में इकाई को ट्रैक करती है और इसके राज्य को Unchanged में बदलती है। जब आप कुछ संपत्ति संशोधित करते हैं तो ट्रैकिंग परिवर्तन आपके राज्य को Modified में बदल देगा। यदि आप उपरोक्त खुलासा करते हैं तो आप स्पष्ट रूप से बता रहे हैं कि राज्य Modified है लेकिन यह आपके संदर्भ में इकाई को भी संलग्न करता है। आप इस post में एक विस्तृत स्पष्टीकरण पा सकते हैं।

आपको Attach विधि का उपयोग कब करना चाहिए?

आप एक इकाई है कि आप पहले से ही पता डेटाबेस में मौजूद है, लेकिन कुछ परिवर्तन करना चाहते हैं जब: इकाई की

context.Entry(entity).State = EntityState.Unchanged; 

// Do some change... 
entity.value=5; 

context.SaveChanges(); 

जब आप बदलना चाहिए:

var entity= new Entity{id=1}; 
context.YourDbSet.Attach(entity); 

// Do some change... 
entity.value=5; 

context.SaveChanges(); 

यह वही है स्पष्ट रूप से संशोधित राज्य?

जब आपके पास ऐसी इकाई है जो आप जानते हैं कि डेटाबेस में पहले से मौजूद है लेकिन परिवर्तन पहले से ही किए जा चुके हैं। आपके उदाहरण का एक ही परिदृश्य

+0

धन्यवाद, लेकिन इस रिकॉर्ड को वर्तमान में संदर्भ द्वारा क्यों ट्रैक किया गया है? –

+0

यदि इकाई वर्तमान में ट्रैक की गई है और आप कुछ संपत्ति बदलते हैं, तो ट्रैकिंग स्थिति के कारण इकाई की स्थिति को 'संशोधित' में बदलना चाहिए, लेकिन इसके लिए आपकी संस्थाओं को यह [आवश्यकताओं] को पूरा करना चाहिए (https://msdn.microsoft.com/ en-us/library/dd468057 (v = vs.100) .aspx) – octavioccl

+0

मुझे लगता है कि यह [लिंक] (https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449331825/ch04s03.html) आपके सभी सवालों का जवाब दे सकता है – octavioccl

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