1

我正在尝试将 NHibernate 与现有数据库一起使用。数据库记录用户之间的单向关系:

Users
    UserId              PK
    Name

Relationships
    RelationshipId      PK
    ParentId            FK:Users_UserId
    ChildId             FK:Users_UserId

我想用 NHibernate 来表示这个。目前,我有以下 POCO 对象:

class User {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }

    public ICollection<User> ParentUsers {get; set;}
    public ICollection<User> ChildUsers {get; set;}
}

我也有这个映射文件:

<class name="User" table="Users">
    <id name="Id"></id>
    <property name="Name"></property>
</class>

我查看了网络上的指南,但我无法确定需要在映射文件中放入什么来连接我的两个ICollection属性。

我应该如何映射这个数据结构?我目前的方法是正确的,还是创建第二个 POCO 类并只使用两个many-to-one关系更好?

4

1 回答 1

2

我可能遗漏了一些东西,但这应该让你开始:

<idbag name="ParentUsers" table="Relationships">
  <collection-id column="RelationshipId" type="...">
    <generator class="..."/>
  </collection-id>
  <key column="ChildId"/>
  <many-to-many column="ParentId" class="User"/>
</idbag>
<idbag name="ChildUsers" table="Relationships">
  <collection-id column="RelationshipId" type="...">
    <generator class="..."/>
  </collection-id>
  <key column="ParentId"/>
  <many-to-many column="ChildId" class="User"/>
</idbag>

此外,其中一个集合应标记为inverse

于 2012-09-10T23:08:43.180 回答