如何创建多个实体与另一个实体之间的NHibernate关系映射(即继承映射)

时间:2013-04-03 04:46:32

标签: nhibernate inheritance orm nhibernate-mapping

我在Car,Bike,Skateboard对象与Person对象之间存在这种关系。 该关系存储在所有权表中。

Car, Bike, Skateboard map to Person

如何在NHibernate中创建此映射?我正在尝试遵循本教程:http://nhibernate.info/doc/nh/en/index.html#inheritance。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

这是我可能会这样做的方式。

<class lazy="false"  name="Domain.OwnerShip, Domain" table="OwnerShip_Table">
  <id name="Id" column="OwnerShipId" type="System.Int32" access="property">
    <generator class="identity"></generator>
  </id>
  <joined-subclass name="Car" table="Cars" lazy="false">
    <key column="Id" />
    <property name="Owner" />
  </joined-subclass>
  <joined-subclass name="Bike" table="Bikes" lazy="false">
    <key column="Id" />
    <property name="Owner" />
  </joined-subclass>
  <joined-subclass name="Skateboard" table="Skateboards" lazy="false">
    <key column="Id" />
    <property name="Owner" />
  </joined-subclass>
</class>

你可能想要一个Persons表以及一个Person Entity,其中包含Person拥有Bag of OwnedVehicles的映射。

答案 1 :(得分:0)

这是一个选项,每个层次结构都有一个表。 我假设:

  • 所有权拥有自己的ID(OwnerShipId,自动生成)
  • 每个引用的类/表(BikeId, CarId)都有一列,用于处理不同的键类型和外键

映射看起来像是:

<class lazy="false"  name="Domain.OwnerShip, Domain" table="OwnerShip_Table" discriminator-value="0">
<id name="Id" column="OwnerShipId" type="System.Int32" access="property">
    <generator class="identity"></generator>
</id>
    <discriminator column="VehicleTypeCode" type="int"/>
    <many-to-one name="Owner" column="PersonId" not-null="true" fetch="..."/>
    <many-to-one name="CodeType" column="VehicleTypeCode" not-null="true" fetch="..." />
<subclass name="Domain.BikeOwnerShip, Domain" discriminator-value="1">
        <many-to-one name="Bike" column="BikeId" not-null="true" fetch="..."/>
   </subclass>
<subclass name="Domain.CarOwnerShip, Domain" discriminator-value="2">
        <many-to-one name="Car" column="CarId" not-null="true" fetch="..."/>
   </subclass>
</class>

我想在基类中有一个虚拟的,未映射的OwnedObject属性也很好,比如

public virtual Object OwnedObject{ 
                                 get{return null;}
}
<{1>}类中的OwnedObject实现将是

CarOwnership

希望这会有所帮助