10

मुझे कुछ आश्चर्य है। मैं यहां एक समाधान के साथ बैठा हूं, मेरे पास 1 सुपरक्लास है जिसमें 2 सबक्लास हैं और मैं वर्तमान में इनस्कूलसबस का उपयोग करके इसे मैप कर रहा हूं, लेकिन मुझे लगता है कि यह विधि अप्रचलित है, और कहती है कि मुझे क्लासमैप और सबक्लास मैप चाहिए, लेकिन अगर मैं ऐसा करता हूं ऑटोमैपिंग काम नहीं करता है, और मुझे वह नहीं चाहिए। क्या इसके समाधान की कोई युक्ति है?फ्लुएंट NHibernate शामिल SubClass अप्रचलित

यहाँ पदानुक्रम है:

public class Tag : Entity 
{ 

public virtual string Name {get;set;} 
public virtual User User {get;set;} 

} 

public class RespondentTag : Tag 
{ 
    public virtual IList<Respondent> Respondents {get;set;} 
} 


public class ArchiveTag : Tag 
{ 
    public virtual IList<Survey> Surveys {get;set;} 
} 

कि आप जान जैसा कि मैंने इस हैं कि सूची के साथ उपवर्गों के साथ प्रति पदानुक्रम-मानचित्रण एक मेज होना चाहते हैं कई-से-अनेक। एक टेबल 'टैग' की तरह, फिर Tag_Respondent और Tag_Archive (कई से कई रिश्तों के लिए)।

public class TagMap : IAutoMappingOverride<Tag> 
{ 
    public void Override(AutoMapping<Tag> mapping) 
    { 
    //This is obsolete 
    mapping.JoinedSubClass("RespondentTagId", RespondentTagMap.AsJoinedSubClass()); 
    mapping.JoinedSubClass("ArchiveTagId", ArchiveTagMap.AsJoinedSubClass()); 

    } 
} 

public class RespondentTagMap 
{ 
    public static Action<JoinedSubClassPart<RespondentTag>> AsJoinedSubClass() 
    { 
    return part => 

     part.HasManyToMany(x => x.RespondentList) 
      .Cascade 
      .SaveUpdate() 
      .Inverse() 
      .Table("Tag_Respondent"); 

    } 
} 


public class ArchiveTagMap 
{ 
    public static Action<JoinedSubClassPart<ArchiveTag>> AsJoinedSubClass() 
    { 
    return part => 

     part.HasManyToMany(x => x.Surveys) 
      .Cascade 
      .SaveUpdate() 
      .Inverse() 
      .Table("Tag_Archive"); 

    } 
} 

किसी को भी एक समाधान या इस हल करने के लिए एक और समाधान के बारे में पता है:

यहाँ मानचित्रण कि मैं वर्तमान में उपयोग कर रहा हूँ है? (ऑटोमैपिंग को अक्षम किए बिना)

किसी भी उत्तर की सराहना की जाएगी।

अग्रिम धन्यवाद!

+0

क्या आपको कभी यह काम मिल रहा है? मैं एक मिश्रित टेबल-प्रति-सबक्लास और टेबल-प्रति-श्रेणी-पदानुक्रम काम करने की कोशिश कर रहे समान मुद्दों में भाग रहा हूं। – rbellamy

+0

क्या आपको अभी भी यह समस्या है? आपने एफएनएच का किस संस्करण का उपयोग किया था? – Firo

उत्तर

1

अगर मैं आपके उद्देश्य को गलत समझ रहा हूं तो मुझे माफ़ कर दो, लेकिन मैं इस पर एक स्टैब ले जाऊंगा क्योंकि मेरे पास मेरी परियोजना में समान विरासत है (हालांकि मैं एक भेदभावकर्ता कॉलम के साथ एक टेबल-प्रति-बेस-क्लास पैटर्न का उपयोग करता हूं)।

मेरा मानना ​​है कि आप पूरा कर सकते हैं आप FNH अपने Tag आधार वर्ग की अनदेखी हो रही है, तो अपने RespondentTag और ArchiveTag वस्तुओं पर मानचित्रण अधिभावी कई-से-अनेक संबंध को लागू करने के द्वारा करने के लिए देख रहे हैं क्या। अपने FNH विन्यास में तो, आप की अपनी मैपिंग कॉल करने के लिए एक तर्क निर्दिष्ट करें:

m.AutoMappings.Add(AutoMap.AssemblyOf<SomeObjectInMyAssembly>(new MyAutoMapConfig()) // Assuming you're using a config class 
    .IgnoreBase(typeof(Entity)) 
    .IgnoreBase(typeof(Tag)) 
    .UseOverridesFromAssemblyOf<SomeOverrideClass>()); 

तो फिर तुम जो कुछ भी विधानसभा आप उन्हें भंडारण कर रहे हैं में ओवरराइड स्थापित करने के लिए होगा।

public class RespondentTagOverride : IAutoMappingOverride<RespondentTag> 
{ 
    public void Override(AutoMapping<RespondentTag> mapping) 
    { 
     mapping.HasManyToMany(x => x.RespondentList) 
      .Cascade 
      .SaveUpdate() 
      .Inverse() 
      .Table("Tag_Respondent"); // Not sure if the table call works in the override...you may have to use a convention for this 
    } 
} 

ArchiveTag वस्तु के लिए एक ही: आप कुछ इस तरह होगा।

यह मेरी विरासत योजना में जो कुछ भी करता है, वही है, जैसा कि मैंने बताया है, मेरे ऑटोमैप कॉन्फ़िगरेशन क्लास में मैंने IsDiscriminated विधि को ओवरराइड करने के लिए यह इंगित करने के लिए कि मेरी ऑब्जेक्ट्स टेबल-प्रति-बेस-क्लास हैं और भेदभाव करती हैं।

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