कर जब इस तरह से संलग्न, जब तक आप तो इकाई पर एक संपत्ति अद्यतन करने के लिए आगे बढ़ने के लिए बराबर है, अगली बार जब आप context.SaveChanges()
फोन, एफई इस इकाई के लिए एक डेटाबेस अद्यतन उत्पन्न नहीं करेगा।
भले ही आप किसी इकाई को अपडेट करने की योजना बना रहे हों, अगर इकाई में बहुत से गुण (डीबी कॉलम) हैं, लेकिन आप केवल कुछ अपडेट करना चाहते हैं, तो आपको DbSet.Attach(entity)
करने के लिए लाभकारी लगेगा, और फिर केवल उन कुछ गुणों को अपडेट करें जिन्हें अद्यतन करने की आवश्यकता है। इस तरह से ऐसा करना ईएफ से एक अधिक कुशल अद्यतन कथन उत्पन्न करेगा। ईएफ केवल आपके द्वारा संशोधित गुणों को अपडेट करेगा (context.Entry(entity).State = EntityState.Modified;
के विपरीत जो सभी गुण/कॉलम अपडेट किए जाएंगे)
प्रासंगिक दस्तावेज: Add/Attach and Entity States।
कोड उदाहरण
मान लीजिए कि आप निम्नलिखित इकाई करते हैं:
public class Person
{
public int Id { get; set; } // primary key
public string FirstName { get; set; }
public string LastName { get; set; }
}
अपने कोड इस तरह दिखाई देता है:
context.Entry(personEntity).State = EntityState.Modified;
context.SaveChanges();
एसक्यूएल कुछ इस तरह दिखेगा उत्पन्न:
UPDATE person
SET FirstName = 'whatever first name is',
LastName = 'whatever last name is'
WHERE Id = 123; -- whatever Id is.
ध्यान दें कि उपरोक्त अद्यतन कथन सभी कॉलम अपडेट करेगा, भले ही आपने वास्तव में मूल्यों को बदल दिया हो या नहीं।
इसके विपरीत, यदि आपके कोड "सामान्य" का उपयोग करता है इस तरह संलग्न करें:
context.People.Attach(personEntity); // State = Unchanged
personEntity.FirstName = "John"; // State = Modified, and only the FirstName property is dirty.
context.SaveChanges();
तब उत्पन्न अद्यतन बयान अलग है:
UPDATE person
SET FirstName = 'John'
WHERE Id = 123; -- whatever Id is.
आप देख सकते हैं, अद्यतन बयान केवल उन मानों को अद्यतन करता है जो वास्तव में संदर्भ में इकाई को संलग्न करने के बाद बदल दिए गए थे। आपकी तालिका की संरचना के आधार पर, इसका सकारात्मक प्रदर्शन प्रभाव हो सकता है।
अब, जो विकल्प आपके लिए बेहतर है, वह पूरी तरह से निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।
बेहतर कुछ संस्करण जानकारी जोड़ें, इससे पहले पूछा गया है। मैं स्पष्ट नहीं हूं कि यह एक नया सवाल है। –