无法在实体之间创建一对一关系
Unable to create one-to-one relationship between entities
更新 1: 为实体 类.
添加了 link 代码
我有一个 Vehicle
实体(用于保存有关车辆的信息)和一个
UploadedDocument
实体(代表任何上传的文档,在本例中(例如)注册文件)存储在数据库中的单独 table 中(其他实体可能也需要存储上传的文档)。这些之间是一一对应的。
映射:
<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
and UploadedDocument
classes。保存这些 类 的代码如下所示:
using (ISession sess = NHibernateHelper.OpenSession())
{
sess.Save(uploadedDoc);
vehicleToAdd.Registration = uploadedDoc;
sess.Save(vehicleToAdd);
}
事情没有像我期望的那样工作:NHibernate 没有为
UploadedDocument
到 Vehicles
table 因此没有
一对一关系。
如果我简单地将我的 <one-to-one>
映射更改为 Vehicle.hbm.xml
文件中的 <many-to-one
name="Registration" class="UploadedDocument" column="RegistrationID" />
,我可以让事情正常进行,但我不需要
双向映射或多对一。简单明了的一对一映射
其中 RegistrationID
列出现在 Vehicles
table 中。做
NHibernate 没有提供创建一对一关系的简单方法
Vehicle
和 UploadedDocument
?
您需要在您的 <one-to-one>
标签中设置一个外键,否则,NHibernate 将通过它们的 ID 连接两个实体。
如果您想通过创建列将主要实体(车辆)连接到通过其 ID 的另一个实体,您需要添加外键属性并声明连接列。
<one-to-one name="Registration" class="UploadedDocument" foreign-key="RegistrationID" />
找到了执行此操作的正确方法:使用添加了 unique
约束的 <many-to-one>
映射:
<many-to-one name="Registration" class="UploadedDocument"
column="RegistrationID" unique="true" />
进一步参考:5.1.12. one-to-one
更新 1: 为实体 类.
添加了 link 代码我有一个 Vehicle
实体(用于保存有关车辆的信息)和一个
UploadedDocument
实体(代表任何上传的文档,在本例中(例如)注册文件)存储在数据库中的单独 table 中(其他实体可能也需要存储上传的文档)。这些之间是一一对应的。
映射:
<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
and UploadedDocument
classes。保存这些 类 的代码如下所示:
using (ISession sess = NHibernateHelper.OpenSession())
{
sess.Save(uploadedDoc);
vehicleToAdd.Registration = uploadedDoc;
sess.Save(vehicleToAdd);
}
事情没有像我期望的那样工作:NHibernate 没有为
UploadedDocument
到 Vehicles
table 因此没有
一对一关系。
如果我简单地将我的 <one-to-one>
映射更改为 Vehicle.hbm.xml
文件中的 <many-to-one
name="Registration" class="UploadedDocument" column="RegistrationID" />
,我可以让事情正常进行,但我不需要
双向映射或多对一。简单明了的一对一映射
其中 RegistrationID
列出现在 Vehicles
table 中。做
NHibernate 没有提供创建一对一关系的简单方法
Vehicle
和 UploadedDocument
?
您需要在您的 <one-to-one>
标签中设置一个外键,否则,NHibernate 将通过它们的 ID 连接两个实体。
如果您想通过创建列将主要实体(车辆)连接到通过其 ID 的另一个实体,您需要添加外键属性并声明连接列。
<one-to-one name="Registration" class="UploadedDocument" foreign-key="RegistrationID" />
找到了执行此操作的正确方法:使用添加了 unique
约束的 <many-to-one>
映射:
<many-to-one name="Registration" class="UploadedDocument"
column="RegistrationID" unique="true" />
进一步参考:5.1.12. one-to-one