2009-11-12 14 views
5

के साथ कई से कई रिश्तों को कैसे बनाया जाए, मैं कई रिश्ते में बहुत से लोगों को बनाना चाहता हूं, लेकिन मैं नई तालिका (MessageReceivers) में दोनों कॉलम पर एक अनूठा दबाव रखना चाहता हूं (AdvanceMessageId, प्रयोक्ता-आईडी):फ्लुएंट-एनएचबर्ननेट: एक अद्वितीय contraint

mapping.HasManyToMany(x => x.Receivers) 
     .WithParentKeyColumn("AdvanceMessageId") 
     .WithChildKeyColumn("UserId") 
     .Cascade.All() 
     .LazyLoad() 
     .WithTableName("MessageReceivers"); 

मदद

उत्तर

5

पुरानी पोस्ट ... लेकिन मामले में किसी और आता है यहां उत्तर की तलाश है:

आपको जोड़ने की आवश्यकता है .ससेट() हैस्मानी टोमनी मैपिंग निश्चित करने के लिए।


अर्थात

mapping.HasManyToMany(x => x.Users) 
     .WithTableName("MessageReceivers") 
     .WithParentKeyColumn("UserId") 
     .WithChildKeyColumn("AdvanceMessageId") 
     .Inverse().AsSet(); 

हो जाएगा ताकि सेटअप एक अद्वितीय, समग्र प्राथमिक कुंजी दोनों स्तंभ का उपयोग करता है लिंक मेज पर बाधा। (क्लस्टर्ड इंडेक्स)

नीचे की तरफ AsSet() को IList प्रकार के संग्रह गुणों के साथ उपयोग नहीं किया जा सकता है, इसलिए बिना कास्टिंग के लूप के लिए।

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


और जानकारी:

सूची: संस्थाओं के आदेश दिया संग्रह, अनुमति डुप्लिकेट। कोड में एक .net IList का प्रयोग करें। इंडेक्स कॉलम को एनएचबेर्नेट में मैप किए जाने की आवश्यकता होगी।

सेट: अद्वितीय इकाइयों का अनियंत्रित संग्रह, डुप्लिकेट की अनुमति नहीं है। कोड में Iesi.Collection.ISet का उपयोग करें। डुप्लिकेट की व्यावसायिक परिभाषा को इंगित करने के लिए GetHashCode और Equals को ओवरराइड करना महत्वपूर्ण है। ऑर्डरबाय को परिभाषित करके या एक तुलनात्मक को परिभाषित करके क्रमबद्ध किया जा सकता है जिसके परिणामस्वरूप सॉर्टेडसेट परिणाम होता है।

बैग: इकाइयों की अनियमित सूची, डुप्लिकेट की अनुमति है। कोड में एक .net IList का प्रयोग करें। सूची का इंडेक्स कॉलम मैप नहीं किया गया है और एनएचबीर्नेट द्वारा सम्मानित नहीं किया गया है।

+0

बहुत मूल्यवान जानकारी; साझा करने के लिए धन्यवाद। – contactmatt

2

के लिए धन्यवाद तुम भी तरह

mapping.HasManyToMany(x => x.Users) 
     .WithTableName("MessageReceivers") 
     .WithParentKeyColumn("UserId") 
     .WithChildKeyColumn("AdvanceMessageId") 
     .Inverse(); 

नवीनतम धाराप्रवाह NHibernate में रिश्ते की उलटा पक्ष नक्शा चाहिए आप करेंगे > तालिका

  • WithParentKeyColumn - -> ParentKeyColumn

  • WithChildKeyColumn -

    • WithTableName बदलना होगा> ChildKeyColumn

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