यह बिल्कुल आसान नहीं है। मैंने ऐसा कुछ लिखा है, लेकिन यह हमारी जरूरतों के लिए बहुत विशिष्ट है और तुच्छ नहीं है।
कुछ अतिरिक्त संकेत:
अगर संदर्भों का उपयोग
NHibernateUtil.IsInitialized(entity)
या
NHibernateUtil.IsPropertyInitialized(entity, propertyName)
आप IPersistentCollection
करने के लिए संग्रह डाल सकता लोड किए गए हैं परीक्षण कर सकते हैं। मैं कार्यान्वित एक IInterceptor
मैं कहाँ मिलता है प्रत्येक संपत्ति के NHibernate प्रकार, मैं नहीं जानता कि जहां यह जब घटनाओं का उपयोग कर सकते हैं:
if (nhtype.IsCollectionType)
{
var collection = previousValue as NHibernate.Collection.IPersistentCollection;
if (collection != null)
{
// just skip uninitialized collections
if (!collection.WasInitialized)
{
// skip
}
else
{
// read collections previous values
previousValue = collection.StoredSnapshot;
}
}
}
जब आप NHibernate से अद्यतन घटना मिलता है, उदाहरण के आरंभ नहीं हो जाता। आप सुरक्षित रूप से आदिम प्रकारों के गुणों तक पहुंच सकते हैं। जब आप ToString
का उपयोग करना चाहते हैं, तो सुनिश्चित करें कि आपका ToString
कार्यान्वयन किसी भी संदर्भित संस्थाओं और न ही किसी संग्रह को एक्सेस नहीं करता है।
आप एनबीबेर्नेट मेटा-डेटा का उपयोग यह पता लगाने के लिए कर सकते हैं कि किसी प्रकार को किसी इकाई के रूप में मैप किया गया है या नहीं। यह आपके ऑब्जेक्ट मॉडल में नेविगेट करने के लिए उपयोगी हो सकता है। जब आप किसी अन्य इकाई का संदर्भ देते हैं, तो इसे बदलते समय आपको अतिरिक्त अपडेट ईवेंट मिलेंगे।
स्रोत
2010-06-22 06:56:40
बस स्पष्ट करने के लिए, मुझे एक ऐसा समाधान चाहिए जिसमें आलसी लोडिंग या अन्य महत्वपूर्ण कार्यक्षमता बलिदान शामिल न हो। मैं एक ऐसा समाधान भी चाहता हूं जो डेवलपर-सुरक्षित है - अत्यधिक अस्पष्ट कारण के लिए अपवाद को बहुत ही अलग किया जा सकता है, और अक्सर प्रतिलिपि या डीबग करना लगभग असंभव होता है। – cbp