非主键xml映射上的NHibernate内连接

时间:2017-03-27 11:39:42

标签: sql-server nhibernate

我有两张表,例如: FirstTable(firstID, field1), SecondTable(secondID, firstID, field2)

我有一个xml映射:

<class name="testClass" 
             table="SecondTable"
             lazy="false">
    <id name="ID" column="secondID" type="Guid">
      <generator class="guid"/>
    </id>
    <property name="Field2" column="field2" type="string"/>
    <join table="FirstTable">
      <key column="firstID"/>
       <property name="Field1" column="field1"/>
    </join>
  </class>

问题是因此我希望得到如下查询:

select * from SecondTable st
inner join FirstTable ft on st.firstID = ft.firstID

但现在查询看起来像

select * from SecondTable st
inner join FirstTable ft on st.secondID = ft.firstID

是否可以不加入主要领域?

1 个答案:

答案 0 :(得分:1)

理想情况下,您应该尊重相关字段,例如&#34; keys&#34;获取您的相关数据。 但您可以按任何字段连接表,因为它们具有相同的值类型。

另外,您可以了解如何加入&#39;看到以下基本链接的工作。 https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg

如果seconId是指向firstTable上的firstId列的FK,那么你的代码也是正确的,而且secondId也可能是PK,所以你可以从secondTable中删除firstId列,但这将是最好的实践。见这 - https://ayende.com/blog/3961/nhibernate-mapping-join

所以代码应该是这样的,你的SecondTable应该有一个属性指向firstID,而另一个类是相关的。我无法在这里测试,我在工作。

<class name="SecondTable" 
             table="SecondTable"
             lazy="false">
    <id name="secondID" type="Guid">
        <generator class="guid"/>
    </id>
    <property name="secondID" type="Guid" />
    <property name="field2" type="string"/>
    <many-to-one name="firstID" column="firstID"/>
</class>
<class name="FirstTable">
    <id name="firstID" type="guid">
        <generator class="guid" />
    </id>
    <property name="Field1"  type="String"  />
</class>