2012-03-12 33 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"); 
    } 
}