【问题标题】:Unable to create one-to-one relationship between entities无法在实体之间创建一对一关系
【发布时间】:2015-06-08 13:33:07
【问题描述】:

更新 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 and UploadedDocument classes 的代码。保存这些类的代码如下所示:

using (ISession sess = NHibernateHelper.OpenSession())
{
    sess.Save(uploadedDoc);
    vehicleToAdd.Registration = uploadedDoc;
    sess.Save(vehicleToAdd);
}

事情并没有像我期望的那样工作:NHibernate 没有为 UploadedDocumentVehicles 表,因此没有 一对一的关系。

如果我只是在Vehicle.hbm.xml 文件中将我的&lt;one-to-one&gt; 映射更改为<many-to-one name="Registration" class="UploadedDocument" column="RegistrationID" />,我可以让事情正常工作,但我不需要 双向映射或多对一。简单明了的一对一映射 其中RegistrationID 列出现在Vehicles 表中。做 NHibernate 没有提供简单的方法来创建它们之间的一对一关系 VehicleUploadedDocument?

【问题讨论】:

    标签: c# nhibernate orm nhibernate-mapping


    【解决方案1】:

    您需要在&lt;one-to-one&gt; 标签中设置一个外键,否则,NHibernate 会通过它们的 ID 连接两个实体。 如果要通过 cretain 列将主实体(Vehicle)连接到通过 ID 的另一个实体,则需要添加外键属性并声明连接列。

    <one-to-one name="Registration" class="UploadedDocument" foreign-key="RegistrationID" />
    

    【讨论】:

    • 试过了,但没有添加RegistrationID
    【解决方案2】:

    找到了正确的方法:使用 &lt;many-to-one&gt; 映射和添加的 unique 约束:

    <many-to-one name="Registration" class="UploadedDocument"
        column="RegistrationID" unique="true" />
    

    更多参考:5.1.12. one-to-one

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-22
      • 2014-08-04
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多