2012-03-12 30 views
0

我有以下NHibernate的HBM,按預期工作,但它使我的代碼變得脆弱,因爲類可能會改變,我想在FNH做映射,但試試我可能,我似乎無法得到它的工作,你尤其是如何獲得索引許多一對多:映射字典與基於實體的密鑰使用流利Nhibernate

<map name="Permissions" table="PermissionsBySet" cascade="all"> 
    <key column="PermissionSet_id" /> 
    <index-many-to-many class="Picomole.ReadModel.Permission, Picomole.ReadModel" column="PermissionId" /> 
    <element column="PermissionType" type="Picomole.ReadModel.PermissionType, Picomole.ReadModel" not-null="true" /> 
</map> 

考慮以下類:

public class PermissionSet : DomainObject 
{ 
    public virtual PermissionSet Defaults { get; set; } 

    public virtual IDictionary<Permission, PermissionType> Permissions { get; set; } 
} 

public class Permission : DomainObject 
{ 
    public virtual string Controller { get; set; } 

    public virtual string Action { get; set; } 
} 

public enum PermissionType 
{ 
    None, 
    Read, 
    Write, 
    Grant 
} 

回答

0

感謝FIRO爲點我正確的方向。什麼我試圖做最後的答案是:

HasManyToMany(x => x.Permissions) 
       .AsEntityMap("PermissionId", "PermissionLevel") 
       .Element("PermissionLevel", x => x.Type<PermissionLevel>()) 
       .Table("PermissionsBySet"); 

,因爲我與有關會話連接的奇怪的錯誤有一些問題,並且是封閉的,我不得不添加:

   .Fetch.Join() 
       .Not.LazyLoad() 
2
public class PermissionSetMap : ClassMap<PermissionSet> 
{ 
    public PermissionSetMap() 
    { 
     HasManyToMany(ps => ps.Permissions) 
      .AsEntityMap("permissions_id") 
      .Element("PermissionType"); 
    } 
}