1

我在 Car、Bike、Skateboard 对象与 Person 对象之间存在这种关系。该关系存储在 Ownership 表中。

汽车,自行车,滑板地图到人

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

4

2 回答 2

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。

于 2013-05-14T16:27:11.917 回答
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;}
}

CarOwnership类中,OwnedObject 实现将是

public override Object OwnedObject{ 
                                 get{return this.Car;}
}

希望这会有所帮助

于 2013-04-03T12:10:10.830 回答