2010-08-05 10 views
6

मेरे पास कई से अधिक रिश्तों में दो इकाइयां हैं।फ्लुएंट एनएचबेर्नेट कई से कई लिंक तालिका पर क्लस्टरेड इंडेक्स बनाते हैं

public class SecurityGroupMappingOverride : IAutoMappingOverride<SecurityGroup> 
{ 
    public void Override(AutoMapping<SecurityGroup> mapping) 
    { 
     mapping.HasManyToMany(x => x.Actions).ParentKeyColumn("securityGroupId").ChildKeyColumn("actionId"). 
      LazyLoad().Table("ActionGroups"); 

     mapping.HasManyToMany(x => x.Members).ParentKeyColumn("securityGroupId").ChildKeyColumn("userId"). 
      LazyLoad().Inverse().Table("UserGroups"); 

     mapping.Map(x => x.Name).Length(64); 

    } 
} 

तो मैं मेज UserGroups से दोनों कॉलम (userId, securityGroupId) पर एक क्लस्टर सूचकांक बनाना चाहते हैं।

या बस दोनों कॉलम पर उपयोगकर्ता समूह पर प्राथमिक कुंजी बनाने के लिए, साथ ही साथ एक ही लिंक नहीं हो सकता है।

धन्यवाद

उत्तर

3

मुझे लगता है कि आप इन इंडेक्स/कुंजी को उत्पन्न करने के लिए NHibernate के SchemaExport टूल चाहते हैं।

के लिए कई-से-अनेक बैग (FluentNHibernate के डिफ़ॉल्ट संग्रह प्रकार), SchemaExport उत्पन्न करता है:

create UserGroups (
    securityGroupId INT not null, 
    userId INT not null, 
) 

कई-से-अनेक सेट के लिए, यह उत्पन्न करता है:

create UserGroups (
    securityGroupId INT not null, 
    userId INT not null, 
    primary key (securityGroupId, userId) 
) 

... तो बस अपने मैपिंग में .AsSet() जोड़ें।

mapping.HasManyToMany(x => x.Members) 
    .AsSet() 
    // ... etc. 

यदि आप बैग और सेट के बारे में सोचते हैं तो यह वास्तव में समझ में आता है। एक सेट के तत्व अद्वितीय होना चाहिए, जबकि बैग की विशिष्टता आवश्यकता नहीं है।

+0

दृश्यता के लिए वोट दिया गया, मैं "कोड द्वारा" के लिए ऐसा करने के तरीके पर खोज कर रहा था और वही समाधान "कोड द्वारा" के लिए भी काम करता है – senthil

0

इसके बजाय आप अपने कोड के शीर्ष पर IAutoMappingOverride<Member> की जरूरत है। और आपको केवल एक mapping.HasManyToMany की आवश्यकता है। यदि आप एक द्विपक्षीय संबंध चाहते हैं, तो आपको MemberMappingOverride कक्षा बनाकर विपरीत मैपिंग करने की आवश्यकता है और वहां आप उलटा चिह्नित करते हैं।

उम्मीद है कि इससे मदद मिलती है।

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