2010-03-26 14 views
5

चलो इसे पहले रास्ते से बाहर निकालें: मुझे पता है कि सत्र कारखाना अपरिवर्तनीय है - मैं रनटाइम पर कॉन्फ़िगरेशन को बदलने और ISessionFactory पुन: उत्पन्न करने की कोशिश कर रहा हूं।एनएचबेर्नेट: रनटाइम पर मैपिंग को कैसे पुन: कॉन्फ़िगर करें?

विशेष रूप से, मेरे पास एक ग्राहक मैप किया गया है जिसमें कुछ फ़ील्ड रनटाइम पर अपने गतिशील-घटक नोड में जोड़े जाएंगे। मैं इस

var newSessionFactory = previousConfiguration 
    .RemoveClassMapping(typeof(Customer)) 
    .AddXmlString(newMappingForCustomer) 
    .BuildSessionFactory(); 

की तरह कुछ करने के लिए हालांकि चाहते हैं, मैं एक मैपिंग निकालने के लिए किसी भी स्पष्ट रास्ता नहीं दिख रहा है, वहाँ कुछ भी मैं पूरी विन्यास पुनः की कमी कर सकते हैं?

+0

वास्तव में इस एक धाराप्रवाह NHibernate सवाल नहीं है और मैं कुछ समय के लिए निर्भरता लेने से बचने के पसंद करते हैं, लेकिन अगर आवश्यकता हो तो मैं इसे ले जाऊंगा। –

उत्तर

1

यह संभव नहीं है। आपको Configuration को पुन: उत्पन्न करना होगा।

मेरा प्रारंभिक सुझाव यह होगा कि आप अपने मॉडल के लिए एक अलग रणनीति चुनते हैं।

हालांकि, अगर आप इस :-) साथ जाने के लिए निर्धारित कर रहे हैं, आप कर सकते हैं:

  • एक "आंशिक" Configuration (शामिल नहीं है Customer)
  • एक MemoryStream
  • करने के लिए इसे क्रमानुसार बनाएं
  • , "आधार" Customer मैपिंग जोड़ें यदि
  • जरूरत अस्थायी SessionFactory
  • पुनः प्राप्त जो भी जानकारी आप ne बनाएं एड मैप करने के लिए Customer
  • deserialize अपने सहेजे गए Configuration
  • Customer मैपिंग जोड़ें और बनाने के अपने अंतिम SessionFactory
+0

डिएगो की क्या रणनीति है? यदि गतिशील घटकों में फ़ील्ड जोड़े गए हैं, और मैप किए गए कॉलम रनटाइम पर डेटाबेस में जोड़े जा रहे हैं (हालांकि कुछ हद तक कम से कम), ऐसा लगता है कि सत्र फैक्ट्री पुन: उत्पन्न करना सबसे सरल होगा। –

+0

अलग-अलग रणनीति रनटाइम पर डेटाबेस में फ़ील्ड जोड़ नहीं रही है। इसके बजाय, अपनी कस्टम विशेषता परिभाषाओं के साथ एक अलग तालिका रखें और दूसरा अपने कस्टम विशेषता मानों के साथ रखें। –

+0

हाँ, मैंने जो भी शुरू में प्रस्तावित किया था, लेकिन वह रणनीति दोनों प्रदर्शन और विरासत संगतता को मार देती है, है ना? मुझे आश्चर्य है कि एनएच इस परिदृश्य के साथ दिमाग में डिजाइन नहीं किया गया था। यह सब दुर्लभ नहीं है। मैं निश्चित रूप से समझता हूं कि सत्र फैक्ट्री की अपरिवर्तनीयता महत्वपूर्ण है, लेकिन अगर आप किसी भी तरह कारखाने को पुन: उत्पन्न करने जा रहे हैं तो कॉन्फ़िगरेशन क्लास को दर्जन अलग-अलग तरीकों से अलग किया जाता है, तो कौन परवाह करता है। –

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