如何在 NHibernate 中加载第二个 table 的列作为模型的属性?

How do I load columns of a second table as properties on a model in NHibernate?

我正在尝试使用 NHibernate 从数据库中的第二个 table 加载列作为模型的属性。我正在使用 XML 映射文件并尝试使用 join 标签。当我构建并尝试 运行 代码时,出现以下错误:

The element 'join' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'key' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'property, many-to-one, component, dynamic-component, any, map, set, list, bag, idbag, array, primitive-array, sql-insert, sql-update, sql-delete' in namespace 'urn:nhibernate-mapping-2.2'.

以下是映射文件的片段:

<class name="Article" table="article">
    <id name="Id" column="articleID" unsaved-value="-1" type="Int32">
        <generator class="identity" />
    </id>
    <property name="ClientId" column="accountID" type="Int32" />
    <property name="PublicNumber" column="articleNum" />    
    <join table="articleLanguage">
        <key column="accountID" />
        <key column="articleNum" />
        <property name="Question" />
        <property name="LanguageId"/>
    </join>
</class>

我做错了什么?

此方法仅在根实体(文章)具有复合键时才有效:

<class name="Article" table="article">
    // not and <id> mapping
    <!--<id name="Id" column="articleID" unsaved-value="-1" type="Int32">
        <generator class="identity" />
    </id>-->
    // but <composite-id>
    <composite-id>
      <key-property name="Id" column="articleID" ></key-property>
      <key-property name="PublicNumber" column="articleNum"></key-property>
    </composite-id>

    <property name="ClientId" column="accountID" type="Int32" />
    <!-- <property name="PublicNumber" column="articleNum" /> -->
    <join table="articleLanguage"> 
        <!-- key is represented as ONE key with two columns
        <!--
          <key column="accountID" />
          <key column="articleNum" />
        -->
        <key >
          <column name="accountID"></column>
          <column name="articleNum"></column>
        </key>
        <property name="Question" />
        <property name="LanguageId"/>
    </join>
</class>

我能理解这不是你喜欢的。但是,如果有两列表示关系,就没有其他办法了。因为能够准确地找到要加入的一行...我们需要两个键。