Nhibernate n使用不同的键创建多对一/一对一

Nhibernate n使用不同的键创建多对一/一对一,nhibernate,nhibernate-mapping,many-to-one,Nhibernate,Nhibernate Mapping,Many To One,嘿,大家好,我正在对NHibernate进行调查,我有一个难题,我已经绞尽脑汁了一段时间,正在处理一个遗留数据库,其中包含一些相当复杂的关系 ClaimRoot具有claimGUID的主键。 ClaimRoot有一包由claimGUID关联的Claimdetails(这是一种享受) 问题在于,ClaimRoot还与ClaimFinancials存在可选的一对一关系(并非所有ClaimRoot都有ClaimFinancials,但大多数都有)。但ClaimFinancials的PK是一个FormI

嘿,大家好,我正在对NHibernate进行调查,我有一个难题,我已经绞尽脑汁了一段时间,正在处理一个遗留数据库,其中包含一些相当复杂的关系

ClaimRoot具有claimGUID的主键。 ClaimRoot有一包由claimGUID关联的Claimdetails(这是一种享受)

问题在于,ClaimRoot还与ClaimFinancials存在可选的一对一关系(并非所有ClaimRoot都有ClaimFinancials,但大多数都有)。但ClaimFinancials的PK是一个FormID领域。此字段存在于ClaimRoot中,但不是PK

我在下面发布了一个地图,删除了额外的列以保护无辜者

  <class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
    <id name="ClaimGUID">
      <generator class="guid"/>      
    </id>
    <property name="FormID" />
    <property name="LastFormNoteText" />
    <bag name="ClaimDetails" inverse="true">
      <key column="ClaimGUID"/>
      <one-to-many class="ClaimDetails"/>
    </bag>
  </class>

  <class name="ClaimDetails" table="tbl_ClaimDetails" schema="DB2.dbo">
    <id name="RowID">
      <generator class="native"/>
    </id>
    <property name="ClaimGUID" />
    <property name="SeqNo"/>
    <property name="B1A_InsID" />
    <many-to-one name="Root" column="ClaimGUID" foreign-key="ClaimGUID"/>
  </class>


  <class name="ClaimFinancials" table="tbl_ClaimFinancials" schema="DB1.dbo">
    <id name="FormID">
      <generator class="native"/>
    </id>
    <property name="CreatedDate"/>
    <property name="SubmittedDate" />
  </class>

提前谢谢!
-Bob

假设FormID仅用于链接ClaimRoot和ClaimFinancials,听起来您希望从ClaimRoot到ClaimFinancials建立多对一关系。将ClaimRoot上的FormId属性替换为多对一

  <class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
    ...
    <many-to-one name="ClaimFinancials" column="FormID" />
    ...
  </class>

...
...

即使“多”端只有“一”,也可以使用多对一关系。如果要生成架构,可以指定
unique=“true”
在数据库中生成约束。对于遗留数据库,这无关紧要。

假设FormID仅用于链接ClaimRoot和ClaimFinancials,听起来您希望ClaimRoot和ClaimFinancials之间建立多对一关系。将ClaimRoot上的FormId属性替换为多对一

  <class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
    ...
    <many-to-one name="ClaimFinancials" column="FormID" />
    ...
  </class>

...
...

即使“多”端只有“一”,也可以使用多对一关系。如果要生成架构,可以指定
unique=“true”
在数据库中生成约束。对于遗留数据库,这并不重要。

仅供参考背景资料-我之所以将这些关系放在一起,是因为我们当前的POCO有一些方法,这些方法的存储过程可以在单个方法调用中更新ClaimFinancials和ClaimRoot,或ClaimFinancials和ClaimDetails,因为关系紧密,我不想拆开遗留应用程序。仅供参考背景资料-我之所以将这些关系放在一起,是因为我们当前的POCO有方法谁的存储过程更新ClaimFinancials和ClaimRoot,或ClaimFinancials和ClaimDetails在单个方法调用中,因为关系紧密,我不想拆开旧版的应用程序。