这是我的班级结构
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>>
但无法使其发挥作用。
专家,请提供建议。
答案 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;答: