多实体映射(不使用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);
}
}