多实体映射(不使用IDicitionary) - FluentNHibernate

时间:2014-11-01 18:14:58

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

这是我的班级结构

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 个答案:

答案 0 :(得分: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;}
}

Group将是:

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

的任何资源或权限过滤组

请同时看看这个Q&amp;答: