2010-08-05 23 views
6

Tôi có hai thực thể trong mối quan hệ nhiều-nhiều.Chỉ số nhóm nhiều người tạo thành thạo NHibernate trên bảng liên kết

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); 

    } 
} 

Vì vậy, tôi muốn tạo chỉ mục nhóm trên cả hai cột (userId, securityGroupId) từ bảng UserGroups.

Hoặc chỉ để tạo Khóa chính trên Nhóm người dùng trên cả hai cột, cùng một lúc không thể là hai liên kết giống nhau.

Cảm ơn

Trả lời

3

Tôi cho rằng bạn đang muốn công cụ SchemaExport của NHibernate để tạo các chỉ mục/khóa này cho bạn.

Đối với nhiều-nhiều túi (FluentNHibernate của loại bộ sưu tập mặc định), SchemaExport tạo:

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

Đối với nhiều-nhiều bộ, nó tạo ra:

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

... vì vậy, chỉ cần thêm .AsSet() vào bản đồ của bạn.

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

Thật có ý nghĩa, thực sự, nếu bạn nghĩ về túi và bộ là gì. Các yếu tố của một bộ được coi là duy nhất, trong khi túi không có một yêu cầu duy nhất.

+0

Được bỏ phiếu cho khả năng hiển thị, tôi đã tìm kiếm cách thực hiện việc này cho "Theo mã" và giải pháp tương tự cũng hoạt động với "Theo mã" cũng – senthil

0

Bạn cần IAutoMappingOverride<Member> thay vì ở đầu mã của bạn. Và bạn chỉ cần một mapping.HasManyToMany. Nếu bạn muốn có một mối quan hệ hai chiều, bạn cần thực hiện ánh xạ đối diện bằng cách tạo một lớp MemberMappingOverride và ở đó bạn đánh dấu nghịch đảo.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan