我在 Car、Bike、Skateboard 对象与 Person 对象之间存在这种关系。该关系存储在 Ownership 表中。
如何在 NHibernate 中创建此映射?我正在尝试遵循本教程: http: //nhibernate.info/doc/nh/en/index.html#inheritance。任何帮助表示赞赏。
我在 Car、Bike、Skateboard 对象与 Person 对象之间存在这种关系。该关系存储在 Ownership 表中。
如何在 NHibernate 中创建此映射?我正在尝试遵循本教程: http: //nhibernate.info/doc/nh/en/index.html#inheritance。任何帮助表示赞赏。
这是我可能会这样做的方式。
<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。
这是一个选项,每个层次结构都有一个表。我假设 :
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;}
}
希望这会有所帮助