2010-03-04 13 views
8

यह पहली बार है जब मैं फ्लुएंट निबर्ननेट मैपिंग के साथ काम कर रहा हूं और किसी अन्य तालिका को संदर्भित करने के सवाल का सामना कर रहा हूं। किसी भी मदद की सराहना की जाती है:हैसोन बनाम रेफरेंस मैपिंग फ्लुएंट एनएचबेर्नेट

मेरे पास सीडी_ वर्नाम नामक कई टेबल हैं और इनमें से सभी में दो कॉलम हैं - कोड और डीईएससीआर।

मैं एक मुख्य तालिका बुलाया प्राप्तकर्ता है और यह दो कॉलम, जिंदा और सेक्स कहा जाता है दोनों प्रकार संख्या के हैं कहते हैं,, है और वे टेबल CD_ALIVE और CD_SEX के संदर्भ में। अगर प्राप्तकर्ता में जीवित = 1, तो हमें कोड और descr को सीडी_एएलआईवीई तालिका से प्राप्त करने की आवश्यकता है जहां कोड = 1।

public Class Codef 
{ 
    int Code { get; set; } 
    string Descr { get; set; } 
} 

मेरे प्राप्तकर्ता कक्षा एक घटक के लिए इन प्रदान करती है:

मैं एक Codef वर्ग का वर्णन किया है। प्राप्तकर्ता वर्ग इस तरह दिखता है:

public Class IRecepient 
{ 
    int ID { get; set; } 
    Birth Birth {get; set;} 
    Death Death { get; set; } 
} 

मेरे जन्म और मृत्यु वर्ग हैं:

public Class Birth 
{ 
    DateTime BDate { get; set; } 
    Codef Sex { get; set; } 
    Codef Ethnicity { get; set; } //CD_ETHNICITy Table 
    Codef Race { get; set; } //CD_RACE Table 
} 

और मेरी मौत कक्षा:

public Class Death 
{ 
    DateTime DeathDate { get; set; } 
    Codef Alive { get; set; } 
} 

हां, मुख्य स्तंभ "अलाइव" प्राप्तकर्ता में वास्तव में मेरे प्राप्तकर्ता का संदर्भ दे रहा है। डेथ.एलीव। कोड

मेरे पास एक कोडेफ़ मैपिंग क्लास है:

public CodefMapping() 
     { 
      Map(x => x.Code, "CODE"); 
      Map(x => x.Descr, "DESCR"); 
     } 

मैं प्राप्तकर्ता मानचित्रण करने की कोशिश कर रहा हूं और यह वह जगह है जहां मैं अटक गया हूं। मैं कुछ इस तरह कर सकते हैं:।

HasOne<CodefMapping>(c => c.Death.Alive) 
        .PropertyRef(c => c.Code) 
        .PropertyRef(c => c.Descr) 
        .WithForeignKey("ALIVE"); 

यह :( काम नहीं कर रहा कोई भी मदद बहुत सराहना कर रहा है

धन्यवाद

उत्तर

18

मुझे लगता है कि आप References मानचित्रण का उपयोग करना चाहते

HasOne का अर्थ है कि आप जिन 2 इकाइयों को एक साथ मैपिंग कर रहे हैं, वे "परस्पर अनन्य" पहचानकर्ता

साझा करते हैं

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/

+1

मुझे लगता है कि इस मामले में "परस्पर अनन्य" वाक्यांश का उपयोग गलत है। परस्पर अनन्य का अर्थ यह होगा कि दो तालिकाओं में पहचानकर्ताओं के सेट के बीच शून्य ओवरलैप होगा।अगर मैं लिंक किए गए ब्लॉग पोस्ट को सही ढंग से समझता हूं, तो मुझे लगता है कि उसका मतलब एक साझा पहचानकर्ता है। – Dan

1

References एक संपत्ति मानचित्रण के लिए है।

public DeathMap() 
{ 
    References(x => x.Alive);   
} 

और आपको कोडेफ़ के लिए Id की आवश्यकता है।

public CodefMapping() 
{ 
    Id(x => x.Code); 
    Map(x => x.Descr); 
} 

डिफ़ॉल्ट सम्मेलन स्तंभ नाम संपत्ति नाम से मिलान करने के लिए है, तो आप जब तक कि वे अलग हैं स्तंभ नाम निर्दिष्ट करने के लिए नहीं है।

+0

मृत्यु के लिए अलग मैपिंग के मामले में, मुझे प्राप्तकर्ता मानचित्रण में मुझे कैसे निर्दिष्ट करना चाहिए? यह होना चाहिए: सार्वजनिक प्राप्तकर्ता मानचित्रण() { आईडी (x => x.ID); मानचित्र (x => x.Death); } लेकिन यह कैसे पता चलेगा कि इसे प्राप्तकर्ता में "जीवित" कॉलम को "कोड" कॉलम में सीडी_एलीव तालिका में बांधना चाहिए? क्षमा करें, मैं इस चरण में निबर्ननेट में गूंगा हो सकता हूं। धन्यवाद। – Aparna

+0

लिंक टूटा हुआ है। –

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