繁体   English   中英

NHibernate将多个表映射到一个类

[英]NHibernate Mapping multiple tables to one class

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

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?

提前致谢。

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

<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>

你能做到吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM