5

के बीच क्या अंतर है मैं तीव्र आर्किटेक्चर लाइट के साथ खेल रहा हूं, जो कॉन्फ़िगरेशन पर सम्मेलन पर जोर देता है, और यह समझने की कोशिश कर रहा है कि एनएचबीरनेट ConventionModelMapper कैसे काम करता है। विशेष रूप से, मैं IsRootEntity & IsEntity विधियों के नीचे के बीच अंतर नहीं बता सकता (btw, Entity एक अमूर्त वर्ग है कि तीव्र आर्क के साथ जहाजों है):NHibernate ConventionModelMapper; IsRootEntity और IsEntity

 internal static class Conventions 
     { 
     public static void WithConventions(this ConventionModelMapper mapper, Configuration configuration) { 
       Type baseEntityType = typeof(Entity); 

       mapper.IsEntity((type, declared) => IsEntity(type)); 
       mapper.IsRootEntity((type, declared) => baseEntityType.Equals(type.BaseType)); 

     public static bool IsEntity(Type type) { 
       return typeof(Entity).IsAssignableFrom(type) 
         && typeof(Entity) != type 
         && !type.IsInterface; 
      } 
    } 

मैं इकट्ठा कि IsEntity विधि NHibernate बताने के लिए प्रयोग किया जाता है जो कक्षाएं डीबी को मैपिंग/दृढ़ता के लिए पात्र हैं। हालांकि, मैं अपने जीवन के लिए यह नहीं समझ सकता कि IsRootEntity विधि क्या करती है। ConventionModelMapper के आसपास दस्तावेज़ बहुत खराब है।

उत्तर

1

आप मामले पर विचार करें:

class B : Entity { ... } 
class A : B { ... } 

जब उन्हें मानचित्रण, दोनों ए और बी संस्थाओं (IsEntity उनके लिए सही लौटना चाहिए), और NHibernate बी के एक उपवर्ग के रूप में एक नक्शा होगा हालांकि, इकाई खुद को मैप नहीं किया जाना चाहिए क्योंकि यह सभी इकाइयों के लिए आधार वर्ग है (आमतौर पर आप इस बेस क्लास को मैप नहीं करना चाहते हैं), इसलिए IsRootEntity Entity के लिए सच हो जाएगा, और इसके सभी सबक्लास के लिए झूठा - इस प्रकार यह इंगित करता है कि इकाई को मैप नहीं किया जाना चाहिए चूंकि यह एक "रूट" वर्ग

+0

आपके मामले के लिए, IsEntity() को ए और बी के लिए सच होना चाहिए, जबकि IsRootEntity केवल बी के लिए सच होना चाहिए। IsRoot इकाई() IsEntity() का एक उप सेट होना चाहिए और केवल वर्ग विरासत के मैपिंग को नियंत्रित करने के लिए उपयोग किया जाता है। उदाहरण के लिए, यदि आप ए और बी दोनों के लिए IsRootEntity को सत्य पर सेट करते हैं तो यह उनके सभी गुणों को दो अलग-अलग वर्गों के रूप में मैप करेगा। – dotjoe