更新1:向实体类的代码添加了链接。
我有一个Vehicle
实体(用于保存有关车辆的信息)和一个UploadedDocument
实体(表示任何上载的文档,在这种情况下(例如,注册文件))存储在数据库中的单独表中(其他实体也可能需要存储上载的文档) 。这些之间存在一一对应的关系。
对应:
<class name="Vehicle" table="Vehicles" lazy="true">
<id name="ID">
<generator class="native" />
</id>
<property name="License" />
<property name="ManufactureYear" />
<property name="PurchaseYear" />
<one-to-one name="Registration" class="UploadedDocument" />
</class>
<class name="UploadedDocument" table="UploadedDocuments" lazy="true">
<id name="ID">
<generator class="native" />
</id>
<property name="Name" />
<property name="Data" length="2147483647" />
<many-to-one name="SupplierCustomer" class="SupplierCustomer" column="SupplierCustomerID" />
</class>
Vehicle
和UploadedDocument
类的代码。保存这些类的代码如下所示:
using (ISession sess = NHibernateHelper.OpenSession())
{
sess.Save(uploadedDoc);
vehicleToAdd.Registration = uploadedDoc;
sess.Save(vehicleToAdd);
}
事情没有按我期望的那样工作:NHibernate不会UploadedDocument
在Vehicles
表中添加ID字段,因此没有一对一的关系。
如果仅将<one-to-one>
映射更改<many-to-one name="Registration" class="UploadedDocument" column="RegistrationID" />
为Vehicle.hbm.xml
文件中的,就可以正常工作,但不需要双向映射或多对一映射。普通的,简单的一对一映射,其中表中RegistrationID
出现一列Vehicles
。NHibernate是否没有提供在Vehicle
和之间建立一对一关系的简单方法UploadedDocument
?
找到正确的方法:使用<many-to-one>
具有附加unique
约束的映射:
<many-to-one name="Registration" class="UploadedDocument"
column="RegistrationID" unique="true" />
进一步的参考:5.1.12。一对一
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句