2013-12-08 10 views
49

में पृथक इकाई को सहेजें I मैंने इकाई फ्रेमवर्क में एक अलग इकाई को सहेजने के लिए बहुत सारी पोस्टों को पढ़ा है। वे सभी एंटीटी फ्रेमवर्क के पुराने संस्करणों पर लागू होते प्रतीत होते हैं। वे ApplyCurrentValues ​​और ChangeObjectState जैसे विधियों का संदर्भ देते हैं जो मौजूद नहीं हैं। एक लहर पर मैं एक विधि मैं IntelliSense के माध्यम से पाया कोशिश करने का फैसला किया और मुझे यकीन है कि यह ऐसा करने का सही तरीका है के बाद से मैं पर्दे के पीछे क्या हो रहा है देखने के लिए नहीं मिलता है बनाना चाहते:इकाई फ्रेमवर्क 6

public void SaveOrder(Order order) 
{ 
    using (VirtualWebEntities db = new VirtualWebEntities()) 
    { 
     db.Orders.Attach(order); 
     db.Entry(order).State = System.Data.Entity.EntityState.Modified; 
     db.SaveChanges(); 
    } 
} 

है बदले गए मौजूदा आइटम को अपडेट करने का यह सही तरीका है?

उत्तर

80

हाँ, यह सही है। This article describes various ways of adding and attaching entities, और यह इस उदाहरण प्रदान करता है:

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" }; 
using (var context = new BloggingContext()) 
{ 
    // The next step implicitly attaches the entity 
    context.Entry(existingBlog).State = EntityState.Modified; 
    // Do some more work... 
    context.SaveChanges(); 
} 

के बाद से एफई पता नहीं है जो गुण डेटाबेस में उन से अलग हैं, यह उन सब को अपडेट कर देगा:

जब आप संशोधित करने के लिए राज्य को बदलने इकाई के सभी गुणों को संशोधित के रूप में चिह्नित किया जाएगा और SaveChanges कहलाते समय सभी संपत्ति मान डेटाबेस में भेजे जाएंगे।

इससे बचने के लिए आप कर सकते हैं set which properties are modified मैन्युअल बल्कि पूरे इकाई राज्य की स्थापना से:

using (var context = new BloggingContext()) 
{ 
    var blog = context.Blogs.Find(1); 
    context.Entry(blog).Property(u => u.Name).IsModified = true;  
    // Use a string for the property name 
    context.Entry(blog).Property("Name").IsModified = true; 
} 
+0

धन्यवाद। तो मैं सिर्फ स्पष्टीकरण देना चाहता हूं .. अब पिछले संस्करणों में लागू करने की अवधारणा की अवधारणा नहीं है जहां आप ईएफ को सूचित कर सकते हैं कि कौन से फ़ील्ड बदल गए? – KingOfHypocrites

+1

@KingOfHypocrites आप कर सकते हैं, मैंने अपना जवाब संपादित कर लिया है। मैं सुझाव देता हूं कि [ईएफ 6 दस्तावेज] (http://msdn.microsoft.com/en-us/data/ee712907) देखें, इसमें बहुत अच्छे उदाहरण और स्पष्टीकरण हैं, और यह एक बहुत ही सरल तरीके से लिखा गया है। –

+0

लिंक के लिए धन्यवाद। आपके उदाहरण के साथ एकमात्र चीज यह है कि मुझे प्रत्येक संपत्ति को मैन्युअल रूप से चिह्नित करना होगा। पुराने संस्करण में एक लागू मूल्य विधि थी, आप नई वस्तु ले सकते हैं और पुराने पर लागू कर सकते हैं। यह स्वचालित रूप से किसी भी बदले गए गुणों को चिह्नित करेगा ताकि यह पता चल सके कि सहेजते समय क्या अपडेट करना है। मैं अभी भी समकक्ष खोज रहा हूं। – KingOfHypocrites

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