मेरे व्यक्तिगत "अक्सर समझाया गया" मुद्दे:
विरोधी पैटर्न
साथ चारों ओर खिलवाड़ अलग वस्तुओं (SaveOrUpdate या मर्ज प्लस कुछ गन्दा कोड) बजाय डीटीओ का उपयोग करने का। जितनी अधिक जटिल इकाइयाँ हैं, कोड उतना ही गड़बड़ है। (इसका यह भी अर्थ है कि यह तुच्छ संस्थाओं के साथ काफी अच्छी तरह से काम करता है।) अयेन्दे इसे स्ट्रिपर पैटर्न भी कहते हैं और एन्कैप्सू मुद्दे को बताते हैं।
स्पष्ट एसक्यूएल का उपयोग करते समय एनएच अनुप्रयोगों को जारी रखने और अज्ञानता को समझने में नहीं । उस के लक्षण: किसी वस्तु को बदलने के बाद अद्यतन को कॉल करना, यह सोच कर कि क्यों परिवर्तन को जारी रखा गया है भले ही अपडेट को कॉल न किया गया हो, यह सोचकर कि परिवर्तनों को बनाए रखने से कैसे बचें।
लेन-देन और कार्य पैटर्न की इकाई को नहीं समझना । बार-बार विरोधी पैटर्न: अंतर्निहित लेनदेन, सत्र-प्रति-संचालन और सत्र-प्रति-अनुप्रयोग। कुछ और पढ़ना:
राष्ट्रीय राजमार्ग का उपयोग घटनाओं में आवेदन तर्क डाल करने के लिए (जैसे। डालने और अद्यतन ट्रिगर में परिवर्तन ट्रैकिंग)
प्रति तालिका एक कक्षा बनाएं । कुछ लोग OOD को नहीं समझते हैं, अन्य लोग संबंधपरक डिज़ाइन को नहीं समझते हैं।
गलतियां
के उपयोग के एक-से-एक के बजाय कई-टू-वन की। मैंने इस उत्तर में समझाने की कोशिश की ।
SetMaxResult के साथ संयोजन में शामिल होने का उपयोग करना । उस विषय से संबंधित मेरे नवीनतम उत्तर:
लेखन स्वयं बदलती संस्थाओं । जब कोई इकाई एनएच द्वारा निर्धारित मूल्य को बिल्कुल वापस नहीं करती है, तो इसे गंदा माना जाता है और हर सत्र में अद्यतन किया जाता है। उदाहरण के लिए: एक संपत्ति सेटर में NH लगातार संग्रह की जगह।
IList<Address> Addresses
{
get { return addresses; }
// will cause the addresses collection to be built up from scratch
// in the database in every session, even when just reading the entity.
set { addresses = new List<Address>(value); }
}
int Whatever
{
// will make the entity dirty after reading negative values from the db.
// this causes unexpected updates after just reading the entity.
get { if (whatever < 0) return 0; }
set { whatever = value; }
}
अधिक हो सकता है।