के साथ इकाई फ्रेमवर्क सत्यापन मैं डीबीकॉन्टेक्स्ट और पीओसीओ इकाइयों के साथ इकाई फ्रेमवर्क 5.0 का उपयोग कर रहा हूं। वहाँ एक साधारण 3 गुण युक्त इकाई है:आंशिक अद्यतन
public class Record
{
public int Id { get; set; }
public string Title { get; set; }
public bool IsActive { get; set; }
}
शीर्षक फ़ील्ड हमेशा असंशोधित है, और यूआई बस इसे संशोधित करने के लिए किसी भी इनपुट बॉक्स प्रदान किए बिना यह प्रदर्शित करता है। यही कारण है कि Title
फ़ील्ड को सर्वर पर भेजा जाने पर null
पर सेट किया गया है।
public class EFRepository<TEntity>
{
...
public void PartialUpdate(TEntity entity, params Expression<Func<TEntity, object>>[] propsToUpdate)
{
dbSet.Attach(entity);
var entry = _dbContext.Entry(entity);
foreach(var prop in propsToUpdate)
contextEntry.Property(prop).IsModified = true;
}
}
और कॉल:
यहाँ कैसे मैं एफई बता इकाई का आंशिक अद्यतन (केवल IsActive
क्षेत्र) करने के लिए यहां
repository.PartialUpdate(updatedRecord, r => r.IsActive);
कॉलिंग SaveChanges
विधि, मैं DbEntityValidationException
मिलता है, कि मुझे बताता है, Title
आवश्यक है। जब मैं dbContext.Configuration.ValidateOnSaveEnabled = false
सेट करता हूं, तो सब कुछ ठीक है। क्या पूरे संदर्भ पर सत्यापन अक्षम करने से बचने के लिए कोई तरीका है और ईएफ को उन गुणों को मान्य करने के लिए नहीं बताया गया है जिन्हें अद्यतन नहीं किया जा रहा है? अग्रिम धन्यवाद।
इस काम का एक बहुत कुछ है जो काफी अन्यथा से निपटने के लिए आसान है करने के लिए की तरह लगता है। आप केवल अपने पढ़ने-योग्य मॉडल आइटम के साथ फ़ॉर्म पर एक छिपे हुए फ़ील्ड को शामिल करते हैं, फिर उन्हें अपडेट में शामिल किया जाता है और ईएफ इसकी परिवर्तन ट्रैकिंग करता है और जानता है कि मान नहीं बदला है। –
स्टब इकाइयों के बारे में क्या? उदाहरण के लिए, मेरे पास एक एक्शन विधि है जो हटाए गए इकाई को चिह्नित करती है। निम्नलिखित कोड: 'var व्यक्ति = नया व्यक्ति {आईडी = 5}; dbSet.Attach (व्यक्ति); dbSet.Entry (व्यक्ति)। प्रॉपर्टी (पी => पी। आईएस हटाया गया) IsModified = true; dbContext.SaveChanges(); 'एक ही अपवाद का कारण बन जाएगा। क्या डीबी कॉन्टेक्स्ट सत्यापन स्टब इकाइयों के साथ अच्छी तरह से काम करता है? मैं डेटाबेस से पूरी इकाई को हटाए जाने के लिए बस इसे चिह्नित करने के लिए अधिग्रहण करना चाहता हूं। – Skog
क्या यह वास्तव में काम करता है? अटैच का उपयोग तब किया जाता है जब आपके पास हाथ में एक इकाई होती है और आप सुनिश्चित हैं कि यह इकाई डेटाबेस में मौजूद है और समान है। आप एक ऐसी इकाई संलग्न करते हैं जो स्टोर में से अलग है (शीर्षक अलग है)। फिर आप इकाई को संशोधित के रूप में चिह्नित करते हैं (किसी संपत्ति को संशोधित करने के लिए चिह्नित करके)। चूंकि ईएफ इकाइयों पर काम करता है और गुणों पर नहीं, यह सभी गुणों को अपडेट करेगा और न केवल संशोधित के रूप में चिह्नित किया जाएगा। ईएफ का मेरा मानसिक मॉडल मुझे बताता है कि डेटाबेस में शीर्षक कॉलम इसके बाद शून्य हो जाएगा। क्या आप जांच सकते हैं कि यह मामला नहीं है? – Pawel