2009-12-29 6 views
7

मैं जो कई SubArea बच्चे हैं एक क्षेत्र वस्तु है:NHibernate बचाने/अद्यतन घटना श्रोताओं: बच्चे वस्तु के लिए सुन बचाता

public class Area 
{ 
    ... 
    public virtual IList<SubArea> SubAreas { get; set; } 
} 

वह बच्चों को एक uni-दिशात्मक गैर व्युत्क्रम संबंध के रूप में उल्लेख किया जाता है:

public class AreaMapping : ClassMap<Area> 
{ 
    public AreaMapping() 
    { 
     HasMany(x => x. SubAreas).Not.Inverse().Cascade.AllDeleteOrphan(); 
    } 
} 

क्षेत्र मेरी कुल जड़ है। जब मैं एक क्षेत्र को सहेजता हूं (उदा। सत्र। सेव (क्षेत्र)), क्षेत्र बचाया जाता है और बच्चे सबएरिया स्वचालित रूप से कैस्केड हो जाते हैं।

जब भी मेरे क्षेत्र और/या उपारे जारी रहते हैं तो मैं पकड़ने के लिए ईवेंट श्रोता को सहेजना या अपडेट करना चाहता हूं। उदाहरण के लिए कहें मेरे पास एक क्षेत्र है, जिसमें 5 सबएरिया हैं। अगर मैं SaveEventListeners में हुक: जब मैं क्षेत्र को बचाने

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

, Mylistener केवल एक बार केवल क्षेत्र के लिए निकाल दिया जाता है (SubAreas अनदेखी कर रहे हैं)। मैं चाहता हूं कि 5 श्रोताओं को घटना श्रोता में भी पकड़ा जाए। अगर मैं बजाय SaveOrUpdateEventListeners में हुक: जब मैं क्षेत्र को बचाने

Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

, Mylistener नहीं बिल्कुल निकाल दिया है।

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 
Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

जब मैं क्षेत्र बचाने के लिए, Mylistener निकाल दिया जाता है 11 बार: क्षेत्र के लिए प्रत्येक SubArea के लिए एक बार, और दो बार अजीब, अगर मैं SaveEventListeners और SaveOrUpdateEventListeners में हुक! (मुझे लगता है क्योंकि NHIbernate SubArea को घुमा रहा है और फिर क्षेत्रीय कुंजी के साथ अद्यतन कर रहा है)।

क्या कोई जानता है कि मैं यहां क्या कर रहा हूं, और कैसे मैं श्रोता को को प्रत्येक क्षेत्र और सबरेआ के लिए आग लग सकता हूं?

+0

क्या आपने इसे काम किया? एक ही समस्या है – andy

+0

मुझे भी! क्या किसी को समाधान मिला? – nozzleman

उत्तर

0

आपके प्रश्न से 100% संबंधित नहीं है, लेकिन यदि आप अपने संग्रह पर उलटा = "सत्य" के साथ मानचित्र करते हैं तो आप कम से कम और अद्यतन विवरण प्राप्त नहीं करते हैं।

+0

सच है, लेकिन मुझे लगता है कि इस संबंध को ऑब्जेक्ट मॉडल में रिश्ते को एक-दिशात्मक बनाने की आवश्यकता होगी (SubArea के क्षेत्र में भी संदर्भ होगा) लेकिन इस मामले में मैं नहीं चाहता या इसकी आवश्यकता नहीं है। –

+0

यह निश्चित रूप से समस्या को हल करने का सबसे आसान तरीका होगा। @ जेम्ससलेन - आप सबएरिया से एरिया तक कई लोगों को क्यों नहीं चाहते हैं? –

0

एनएच वस्तु के आईडी को जानने के लिए INSERT कथन जारी करता है यदि यह ज्ञात नहीं है (उदाहरण के लिए पहचान या अनुक्रम)।

तो यदि आप रद्द करना चाहते हैं तो आपको एक आईडी जेनरेटर का उपयोग करने की आवश्यकता है जिसे डीबी (जैसे कि guid या guid.combo) के लिए राउंडट्रिप की आवश्यकता नहीं है।

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