2010-08-10 12 views
9

मैं इस जैसे एक मॉडल है की एक सूची के मानचित्र (सरलीकृत)धाराप्रवाह NHibernate - तार

public class Post 
{ 
    public string ID { get; set; }  
    public string Title { get; set; } 
    public string Body { get; set; } 
    public string AuthorName { get; set; } 

    public List<string> Attachments { get; set; } 
} 

मेरी डेटाबेस में, मैं एक के बाद तालिका, और एक PostAttachment तालिका

पोस्ट अनुलग्नक टेबल है है 2 कॉलम:

postid AttachmentKey

(इस की मूल बातें है कि लगाव अमेज़न S3 पर अपलोड की हैं, इसलिए AttachmentKey S3 है कुंजी)

मुझे क्या करना चाहते हैं एक लौट आए/डाला पोस्ट वस्तु की सूची को AttachmentKey नक्शा है ...

मैं यह कर के बारे में कैसे जाना होगा?

उत्तर

2

यदि आपको केवल तालिका नाम उत्पन्न करने में सक्षम होने के लिए स्ट्रिंग के चारों ओर एक प्रकार की आवश्यकता हो सकती है। सूची की तरह कुछ भी आपके आवेदन में वैसे भी अधिक सार्थक हो सकता है। मुझे यकीन है कि यदि आप की जरूरत है तो आप गहराई से खुदाई कर सकते हैं और सीधे स्ट्रिंग पर मैप कर सकते हैं।

वहां से आप एक HasMany मानचित्रण और अपनी पोस्ट तालिका के लिए एक विदेशी कुंजी की ओर इशारा करते, यानी साथ शुरू कर सकते

HasMany (o => o.PostAttachments).ForeignKeyConstraintName ("FK_Attachment_Post"); 

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

मैपिंग पर आपको एक .verse() की भी आवश्यकता हो सकती है, इस पर निर्भर करता है कि आप पोस्ट अटैचमेंट कैसे सहेजना चाहते हैं।

संपादित करें: डिएगो की पोस्ट देखने के बाद, मुझे लगता है कि उपर्युक्त कार्य केवल तभी काम कर सकता है, अगर पोस्टएटैचमेंट स्ट्रिंग्स की एक सूची है। मैंने पूर्व धाराप्रवाह दिनों में पोस्ट की गई विधि का उपयोग किया है, और मुझे यकीन है कि HasMany नक्शे डिफ़ॉल्ट रूप से एक निबर्ननेट बैग में हैं। हालांकि मौजूदा तालिका का उपयोग करने के लिए आपको संभावित रूप से अपने मैपिंग में कॉलम नाम निर्दिष्ट करने की आवश्यकता होगी।

<bag name="Attachments" table="Attachment"> 
    <key column="PostId" /> 
    <element column="AttachmentKey" /> 
</bag> 

Btw, Attachments एक IList<string>, नहीं List<string> होना चाहिए:

+1

यह सही उत्तर नहीं है। नीचे मेरा जवाब देखें। HasMany (x => x.Attachments) । केकॉलम ("पोस्टआईडी") .टेबल ("पोस्टएटैचमेंट")। एलिमेंट ("अटैचमेंटकी"); – regisbsb

6

जब तक मैं सवाल गलत समझा, यह सिर्फ इस है।

+0

ओह, मुझे लगता है कि आप धाराप्रवाह का उपयोग कर रहे हैं। खैर, आपको मूल्यों के मानचित्रण संग्रह के बराबर क्या करना होगा। –

+1

"बीटीडब्ल्यू, अटैचमेंट्स एक आईएलआईस्ट होना चाहिए, सूची नहीं" मेरे जीवन को बचाया, मूल रूप से मेरे पास आईसेट था और यह उन तारों को जारी नहीं रख रहा था ... चीयर्स – xhafan

4

फ्लुएंट के साथ इसे कैसे करना है, यह जानने में कुछ समय लगा। स्तंभ जहां

  • एक विदेशी कुंजी वापस -

    • स्ट्रिंग: यह वास्तव में बहुत सरल है:

      public MyClassMapping() 
      { 
          Table("MyClass"); 
      
          Id(x => x.Id); 
      
          HasMany(x => x.Strings) 
           .Table("MyClassStrings") 
           .Element("String"); 
      } 
      

      इस का समर्थन करने के लिए, आप एक मानचित्रण तालिका (MyClassStrings) जो दो स्तंभ हैं बनाने की जरूरत तालिका में MyClass

  • +0

    यह मेरे लिए पूरी तरह से काम करता था। –

    +0

    नीचे मेरा जवाब देखें। यह और सही है। – regisbsb

    11

    @ बेन-ह्यूजेस आप लगभग इसे प्राप्त कर चुके हैं।

    आपको किसी अन्य मानचित्रण की आवश्यकता नहीं है।

    HasMany(x => x.Attachments) 
        .KeyColumn("PostID") 
        .Table("PostAttachment").Element("AttachmentKey"); 
    
    +0

    यह मेरे लिए काम करता है! –

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