NHibernate Conformist使用一组简单类型而不是一组实体映射多对多

时间:2014-04-01 03:00:02

标签: nhibernate collections many-to-many nhibernate-mapping mapping-by-code

我正在使用NHibernate Conformist映射。我已经使用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包含PermissionId列和Name列。然后是包含UserPermissionUserId列的表PermissionId以及包含GroupPermissionGroupId列的表PermissionId

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

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

1 个答案:

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

类用户和组将不具有任何权限集。