2

在我的旧数据库中,我遇到了这样的情况:

TableA (id_A[PK], cod_A)
TableB (id_B[PK], cod_B, id_A[FK])
TableC (id_C[PK], cod_C, id_B[FK])

出于多种原因,我需要将这些表映射到一个类中(本例中为 Foo)

public class Foo
{
    public virtual string IdA { get; set; }
    public virtual string CodA { get; set; }

    public virtual string IdB { get; set; }
    public virtual string CodB { get; set; }

    public virtual string IdC { get; set; }
    public virtual string CodC { get; set; }    
}

通过以下映射,我可以加入 Table1 和 Table2 但不能加入 Table3

<class name="Foo" table="TableA">

    <id name="IdA" column="id_A"/>
    <property name="CodA" column="cod_A"/> 

    <join table="TableB">
      <key column="id_A"/>
      <property name="IdB" column="id_B"/>
      <property name="CodB" column="cod_B"/>      
    </join>

    <!--Here my problem because off course the join will be on TableA instead on TableB-->
    <join table="TableC">
      <key column="id_B"/>
      <property name="IdC" column="id_C"/>
      <property name="CodC" column="cod_C"/>      
    </join>

  </class>

如何映射 Table3?

提前致谢。

4

2 回答 2

1

NHibernate 不鼓励您尽可能多地使用 join。但有时没有办法解决它。

如果可以的话,解决它的第一个也是最简单的方法是创建一个视图并将您的类映射到该视图。

第二种方法是为每个其他表创建一个对象,并以正确的方式连接它们,可能是<one-to-one>映射。

第三种方式

* 警告 - 风险自负 *

下载 NH 源代码 - https://github.com/Nicaog/nhibernate-core/downloads

下载以下错误补丁修复说明 - https://nhibernate.jira.com/browse/NH-1681

更改代码,编译 DLL 并将其添加到您的解决方案中。

说明 - 该补丁实际上修复property-ref了用于<join>映射的问题。但也使用多重连接property-ref

于 2013-11-13T06:56:25.817 回答
0

<id name="IdA" column="id_A"/>
<property name="CodA" column="cod_A"/> 

<join table="TableB">
  <key column="id_A"/>
  <property name="IdB" column="id_B"/>
  <property name="CodB" column="cod_B"/>   

  <join table="TableC">
  <key column="id_B"/>
  <property name="IdC" column="id_C"/>
  <property name="CodC" column="cod_C"/>      
  </join>
</join>

你能做到吗?

于 2017-04-26T16:09:21.203 回答