我正在使用NHibernate Conformist映射。我已经使用ManyToMany
,OneToMany
,Element
和Component
关系类型为我的各种集合属性创建了一些复杂的映射。但是我今天遇到了一个让我难过的人。
public class Permission
{
public virtual long PermissionId { get; set; }
public virtual string Name { get; set; }
}
public class User
{
...
public virtual Set<string> Permissions { get; set; }
}
public class Group
{
...
public virtual Set<string> Permissions { get; set; }
}
表Permission
包含PermissionId
列和Name
列。然后是包含UserPermission
和UserId
列的表PermissionId
以及包含GroupPermission
和GroupId
列的表PermissionId
。
如您所见,Permission
是一个实体,用户和权限之间以及组和权限之间存在多对多关系。但是,为了便于使用User
和Group
个对象,我不希望User
和Group
拥有Set<Permission>
(很容易使用Conformist中的ManyToMany
关系类型完成。我希望User
和Group
拥有一组权限名称。通常我会使用Element
关系类型来实现这一点,除了整个多对多使用连接表问题。
如何映射 多对多的简单类型的集合?
答案 0 :(得分:-1)
如果我理解正确,我宁愿让Permission类具有用户和组的集合:(注意集合,它不是System.Collections.Generic,因为nHibernate理解ISet是Iesi.Collections.Generic .ISet&LT;&GT;
public virtual Iesi.Collections.Generic.ISet<User> Users { get; set; }
public virtual Iesi.Collections.Generic.ISet<Group> Groups { get; set; }
并在Permission的映射中:
<set name="Users" table="PermissionUser" lazy="true">
<key column="PermissionId"/>
<many-to-many class="User" column="UserId" />
</set>
<set name="Groups" table="PermissionGroup" lazy="true">
<key column="PermissionId"/>
<many-to-many class="Group" column="GroupId" />
</set>
类用户和组将不具有任何权限集。