1

這裏是我的階級結構多個實體映射(不使用IDicitionary) - FluentNHibernate

public class Group 
{ 
    public virtual int GroupId {get;set;} 

    public virtual IDictionary<Resource, Permission> ResourcePermissions { get; set; } 
} 

public class Resource 
{ 
    public virtual int ResourceId {get;set;} 
} 

public class Permission 
{ 
    public virtual int PermissionId {get;set;} 
} 

這裏是我的羣覆蓋缺省類

public class GroupMappingOverride : IAutoMappingOverride<Group> 
{ 
    public void Override(AutoMapping<Group> mapping) 
    { 
     mapping.HasManyToMany(x => x.ResourcePermissions) 
     .Table("GroupResourcePermission") 
     .AsEntityMap("ResourceID", "PermissionID"); 


    } 

} 

當我執行,它創建一個表GroupResourcePermission將列[GroupID,ResourceID,PermissionID]與(GroupID和ResourceID)組合爲主鍵。

爲了我的目的,它不起作用。我想將數據存儲爲[1,1,1],[1,1,2],但目前的結構不允許我以格式存儲。我發現有人推薦

IList<Tuple<Resource,Permission>> 

但無法使其工作。

專家,請提供建議。

回答

1

我會親自/強烈建議,請勿使用IDictionary<T, V>many-to-many之類的映射。雖然這是可能的,你以後會遇到問題如何查詢這種關係......

我會引入配對對象

public class Setting 
{ 
    public virtual int SettingId {get;set;} 
    public virtual Group Group {get;set;} 
    public virtual Resource Resource {get;set;} 
    public virtual Permission Permission {get;set;} 
} 

和組將是:的

public class Group 
{ 
    public virtual int GroupId {get;set;} 
    public virtual IList<Settings> Settomgs { get; set; } 
} 

映射Group的設置集合

HasMany(x => x.Settings) 
    .Table("GroupResourcePermission") 
    .KeyColumn("GroupID") 
    .Cascade.AllDeleteOrphan() 
    .Inverse() 
    ; 

Setting映射會像

public class SettingMap : ClassMap<Setting> 
{ 
    public SettingMap() 
    { 
     References(x => x.Group); 
     References(x => x.Resource); 
     References(x => x.Permission); 
    } 
} 

這種映射將在稍後通過其IList<Setting> Settings

請,也看看這個問答& A的任何資源或權限支持組過濾: