使用NHibernate映射受约束的多对多关系的最佳方法是什么?

时间:2011-07-31 07:39:07

标签: nhibernate nhibernate-mapping many-to-many one-to-many one-to-one

我有两个实体,由数据库中的两个表表示,由一个链接表连接,每个外键都有一个唯一约束。 (有关详细信息,请参阅此question)。链接表允许多对多关系,但唯一约束确保在实践中只有一对一的关系。

这个问题的一个很好的比喻是汽车和停车库空间。有很多车和很多空间。一个空间可以包含一辆车或是空的;一辆车一次只能在一个空间内,或者没有空间(不能停放)。

我们有一个Cars表和一个Spaces表以及名为Parking的链接表。这是链接表:

create table parking (
  car_id references car,
  space_id references space,
  unique car_id,
  unique space_id
);

有没有办法在NHibernate中映射这种关系,这样每个实体都拥有一个表示相关实体的属性,而不是一个集合?

1 个答案:

答案 0 :(得分:0)

有可能像这样

class Car
{
    public Space Space { get; set; }
}

public CarMap()
{
    Join("parking", join =>
    {
        join.KeyColumn("car_id");
        join.References(car => car.Space, "space_id");
    });
}

in hbm:

<class name="car">

  <join table="parking">
     <many-to-one name="Space" column="space_id"/>
  </join>
</class>