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