2010-03-25 10 views
5

मैं टेबल का एक सेट बनाने की कोशिश कर रहा हूं जहां हम वास्तव में उन्हें हटा नहीं देते हैं, बल्कि इसके बजाय हम संग्रह झंडे सेट करते हैं। जब हम किसी इकाई को हटाते हैं, तो इसे हटाया नहीं जाना चाहिए, इसे इसके बजाय संग्रहीत के रूप में चिह्नित किया जाना चाहिए।संग्रह झंडे के साथ काम करने के लिए मैं इकाई ढांचे को कैसे प्राप्त करूं?

इसका समर्थन करने के लिए प्रोग्रामिंग पैटर्न क्या हैं?

मैं भी एक और समाधान होने पर इन संग्रहों को झंडे रखने वाली प्रत्येक तालिका के लिए अपनी खुद की संग्रहित प्रोसेस को रोल करना नहीं चाहूंगा।

उत्तर

1

यह एक पुराना प्रश्न है और यह EntityFramework संस्करण निर्दिष्ट नहीं करता है।

Entity Framework: Soft Deletes Are Easy

Soft Delete pattern for Entity Framework Code First

Entity Framework 5 Soft Delete

इसके अलावा वहाँ एफई 6.1.1+ के लिए

Highlights of Rowan Miller’s EF6/EF7 Talk at TechEd 2014

Entity Framework: Building Applications with Entity Framework 6

स्रोत हैं: वहाँ नए संस्करणों के लिए कुछ अच्छे समाधान कर रहे हैं
1
myEntity.IsArchived = true; 
context.SaveChanges(); 

अगर अपनी आवश्यकताओं को नष्ट नहीं कर रहे हैं, तो नहीं हटाते हैं ;-)

+0

मेरी चिंता ज्यादातर संस्थाओं के बीच संबंधों को सही करने के साथ है। मेरी आशा को पूछना नहीं था। हर रिश्ते के खिलाफ कहां (ओ =>! ओ। आर्चिव)। –

0

आप यह करने के लिए अपने स्वयं के तर्क लिखने के लिए होगा, और पर "MarkForDeletion" विधि को दूर उन संस्थाओं।

आपके तर्क को एक प्रदत्त इकाई लेने की आवश्यकता होगी, इसे इंगित करने के लिए इसे किसी भी तरीके से बदलें "अब संग्रहित" है, और उसके बाद संदर्भ पर परिवर्तन सहेजें।

आपको यह सुनिश्चित करने की आवश्यकता होगी कि डीबी से खींचने वाला कोई भी कोड इन मानों को सम्मानित करता है जो एक संग्रहित रिकॉर्ड को इंगित करते हैं।

इसे आसान बनाने के लिए, आप अपनी इकाई कक्षाओं से मेल खाने के लिए आंशिक कक्षाएं बना सकते हैं, इसलिए वे एक कस्टम इंटरफ़ेस का सम्मान करते हैं। इस तरह आप इंटरफ़ेस के खिलाफ कोड कर सकते हैं और इकाई मान सेट करने के लिए प्रतिबिंब का उपयोग नहीं करना है।

आप .NET 4.0 का उपयोग कर सकते हैं, तो एफई Pocos का समर्थन करता है और आप उचित इंटरफेस है, जो नीचे फ़ाइलें आपके साथ काम करना है की संख्या में कटौती के साथ मूल रूप से संस्थाओं चिह्नित कर सकते हैं।

0

मैं सर्वोत्तम प्रथाओं के बारे में यकीन नहीं है, लेकिन आप अपने खुद के DeleteObject विधि लेखन और किसी प्रकार की एक कक्षा में डालने (EFHelper वर्ग मैं चीजों की इन प्रकार के लिए उपयोग का नाम है) की कोशिश कर सकते। फिर ObjectContext.DeleteObject पर कॉल करने के बजाय, आप EFHelper.DeleteObject पर कॉल करते हैं, और उस विधि में कोई कस्टम तर्क करते हैं जिसे आप करना चाहते हैं। यदि आप इन संग्रह ध्वज गुणों को नाम देने के तरीके के अनुरूप हैं, तो आप प्रत्येक इकाई की archive_flag प्रॉपर्टी को खोजने के लिए .NET की प्रतिबिंब API का उपयोग कर सकते हैं, जिसे आप "हटाना" कर रहे हैं और इसे उचित रूप से सेट कर सकते हैं।

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

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