首页 文章

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

提问于
浏览
1

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

命名空间'urn:nhibernate-mapping-2.2'中的元素'join'在命名空间'urn:nhibernate-mapping-2.2'中具有无效的子元素'key' . 预期可能元素的列表:'属性,多对一,组件,动态组件,任何,映射,集,列表,包,idbag,数组,原始数组,sql-insert,sql-update,sql-delete '在命名空间'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>

我究竟做错了什么?

1 回答

  • 1

    只有当根实体(Article)具有复合键时,这种方法才有效:

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

    我明白这不是你喜欢的 . 但是,如果有两列代表关系,那就没有别的办法了 . 因为能够找到恰好一行加入...我们需要两个键 .

相关问题