NHibernate 一致性使用一组简单类型而不是一组实体进行多对多映射



我正在使用NHibernate一致性映射。我已经使用ManyToManyOneToManyElementComponent关系类型为我的各种集合属性创建了一些复杂的映射。但是我今天遇到了一个难倒我的人。

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 具有列 PermissionIdName 列。然后是包含列UserIdPermissionId的表UserPermission,以及具有列GroupIdPermissionId列的表GroupPermission

如您所见,Permission是一个实体,用户和权限之间以及组和权限之间存在多对多关系。但是,为了便于使用 UserGroup 对象,我不希望UserGroup有一个Set<Permission>(使用 Conformist 中的ManyToMany关系类型轻松实现)。我想UserGroup拥有一组权限名称。通常,我会使用 Element 关系类型来实现这一点,除了整个多对多使用连接表问题。

如何映射也是多对多的简单类型的集合?

如果我理解正确,我宁愿让 Permission 类具有用户和组的集合:(请注意,它不属于 System.Collections.Generic ,因为 nHibernate 将 ISet 理解为 Iesi.Collections.Generic.ISet<>

    public virtual Iesi.Collections.Generic.ISet<User> Users { get; set; }
    public virtual Iesi.Collections.Generic.ISet<Group> Groups { get; set; }

在权限映射中:

    <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>

类 用户和组将没有任何一组权限。

最新更新