nhibernate - What false/true really mean for IPreInsertEventListeners? -
मुझे हाल ही में पता चला है कि IPreDeleteEventListener
, IPreInsertEventListener और
IPreUpdateEventListener
में NHibernate.Event
नामस्थान।
हालांकि, यह अभी भी मुझे भ्रमित करता है कि इन घटनाओं को सफल या असफल फाइनल पर या तो क्या लौटाएगा।
उदाहरण के लिए, यहां आइएंडे के ब्लॉग आलेख पर एक नज़र डालें:
-
उसके उदाहरण के बाद, कोई भी निम्न के रूप में इंटरफेस:
सार्वजनिक वर्ग ऑडिटएव्हेंट लिस्टनर: आईपीआरआईएनएसएटीएस्टएलस्टनर {सार्वजनिक बूल ऑनप्रेइन्सर्ट (ऑनप्रेइन्सर्ट @ एव्हेंट) {var ऑडिट = @ इवेंट। एंटीटी IHaveAuditInformation; अगर (ऑडिट == शून्य) वापसी झूठी; Var समय = दिनांकटाइम.अब; Var नाम = WindowsIdentity.GetCurrent ()। नाम; सेट करें (@ ईवेंट.परसिस्टर, @ इवेंट। स्थान, "बनाया गया", समय); सेट करें (@ ईवेंट.परिस्टर, @ ईवेंट। स्थान, "बनाया गया", नाम); Audit.CreatedAt = समय; Audit.Created By = name; विवरण झूठा है; }}
वास्तव में क्या या तो true
या false
वापस मूल्य के रूप में लौटने का मतलब है, क्योंकि मेरे पास एक और उदाहरण है जहां <
जो वापस जाने लगता है झूठे
के बदले सच
।
सार्वजनिक वर्ग सॉफ्ट डिलेटलालिस्टर: आईपीआरडीलेटीएवेंटएलिसनर {सार्वजनिक शून्य पंजीकृत (कॉन्फ़िगरेशन सीएफजी) {cfg.EventListeners.PreDeleteEventListeners = नया आईपीआरडीलेटीइवेंट एलिसनर [] {This} .Concat (cfg.EventListeners.PreDeleteEventListeners) .ओएरे (); } सार्वजनिक बूलियन ऑनप्रेडेलीट (प्रीडेलएटीएवेंट @ एव्हेंट) (आईएसओएफडीएबलटेबल सॉफ्टनेटलेट योग्य = @ इवेंट। एन्टीटीएस आईएसओएफडीएलेटैबल; यदि (सॉफ्ट डिएलेट योग्य == रिक्त) वापस सत्य; EntityEntry प्रविष्टि = @ event.Session .GetSessionImplementation () .परिसेंसेंसटेन्टेक्ट .GetEntry (@ event.Entity); प्रवेश। स्थिति = स्थिति। लोडेड; सॉफ्ट डेलेटेबल.डेलेटेड = सच; ऑब्जेक्ट आईडी = @ इवेंट। पर्सिस्टर .GetIdentifier (@ इवेंट। एंटीटी, @ इवेंट। सेशन। एंटीटी मॉोड); ऑब्जेक्ट [] फ़ील्ड = @ इवेंट। पर्सिस्टेंट .GetPropertyValues (@ event.Entity, @ event.Session.EntityMode); ऑब्जेक्ट संस्करण = @ इवेंट। पर्सिस्टर। गेट वीर्सन (@ इवेंट। एंटीटी, @ इवेंट। सेशन। एंटीटी मॉोड); @ Event.Persister.Update (id, fields, new int32 [1], गलत, खेतों, संस्करण, @ event.Entity, रिक्त, @ event.Session.GetSessionImplementation ()); वापस सच; }}
इसलिए मैं सोचता हूं कि, गलत
/ true
वास्तव में NHibernate को बताता है कि श्रोता के साथ किस प्रकार कार्य करता है।
< इस मामले में लौटा मूल्य enum होना चाहिए, नाम का उपयोग करें OnPreEventResult
, और ये संभव मान होंगे: -
OnPreEventResult.Continue
=> वर्तमान में जारी करने के लिए false
-
OnPreEventResult.Break
=> इस समय, जब true
लौटा जाता है कार्रवाई निरस्त
इसलिए, शो के ऊपर दोनों उदाहरणों के तौर पर, हम निष्पादन प्रवाह को प्रबंधित करने के लिए वापसी मान का उपयोग कर सकते हैं:
-
जारी रखने के लिए : अगर हम AuditEventListener
वापस झूठे में होते हैं, तो हम वास्तव में जैसे कुछ वापस लौटते हैं। >। हमने कुछ custome तर्क बना दिया है, और हम NHibernate को जारी रखना चाहते हैं ... तो झूठे वापस कर दिया गया है
तोड़ने / निरस्त करने के लिए :
आयेंडे का उदाहरण हमें दिखा रहा है कि वास्तविक डिलीटे को अपडेट में कैसे बदला जाए। अपडेट को स्पष्ट रूप से @ इवेंट। नाम दिया जाता है। Parsister.Update (...
और हटाए गए मूल्य true के कारण हटाए गए नहीं , अर्थात < Code> OnPreEventResult.Break
कोड में, लौटाए गए मान को स्थानीय वेरिएबल में संचित कर दिया जाता है जिसे veto
नाम दिया जाता है, जो फिर से अधिक होता है स्वयं वर्णनात्मक।
देखें:
- , या
-
EntityInsertAction से एक स्निपेट
, निष्पादन ()
विधि:
... bool veto = preInsert (); अगर (! वीटो) {persister.Instert (आईडी, राज्य, उदाहरण, सत्र); ...
Comments
Post a Comment