多实体映射(不使用IDICTIONAL)——FluentNHibernate

多实体映射(不使用IDICTIONAL)——FluentNHibernate,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,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

这是我的班级结构

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;}
}
公共类组
{
公共虚拟int-GroupId{get;set;}
公共虚拟IDictionary ResourcePermissions{get;set;}
}
公共类资源
{
公共虚拟int ResourceId{get;set;}
}
公共类许可
{
公共虚拟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");


    }

}
公共类GroupMappingOverride:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.HasManyToMany(x=>x.ResourcePermissions)
.Table(“GroupResourcePermission”)
.AsEntityMap(“资源ID”、“许可ID”);
}
}
当我执行时,它正在创建一个表GroupResourcePermission,其中列[GroupID,ResourceID,PermissionID]以(GroupID和ResourceID)作为组合主键

就我而言,这是行不通的。我想将数据存储为[1,1,1],[1,1,2],但当前的结构不允许以这种格式存储。我发现有人在推荐

  IList<Tuple<Resource,Permission>> 
IList
但没能成功

专家们,请提供建议。

我个人/强烈建议,不要使用像
IDictionary
多对多
这样的映射。虽然这是可能的,但您稍后会遇到如何查询此类关系的问题

我将介绍配对对象

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; }
}
设置
映射如下

public class SettingMap : ClassMap<Setting>
{
    public SettingMap()
    {
        References(x => x.Group);
        References(x => x.Resource);
        References(x => x.Permission);
    }
}
公共类设置映射:类映射
{
公共设置映射()
{
参考文献(x=>x.Group);
参考文献(x=>x.Resource);
引用(x=>x.Permission);
}
}
这种映射稍后将支持通过其
IList设置的任何资源或权限对组进行过滤

请看一下这个问答:

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