我试图使用NHibernate将数据库中的第二个表中的列作为模型上的属性加载。我使用一个XML映射文件,并尝试使用join标记。当我构建并尝试运行代码时,我会得到以下错误:
名称空间‘urn:nhibernate-映射-2.2’中的元素'join‘在名称空间’urn:nhibernate-映射-2.2‘中具有无效的子元素'key’。可能需要的元素列表:“属性、多对一、组件、动态组件、任意、映射、集、列表、袋、idbag、数组、基元数组、sql-insert、sql-update、sql-删除名称空间中的”urn:nhibernate- map -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>我做错了什么?
发布于 2015-03-16 07:55:57
只有在根实体(条款)具有复合密钥的情况下,此方法才能工作:
<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>我能理解这不是你喜欢的。但是,如果有两列表示关系,那么就没有其他方法了。因为只有一排才能加入.两把钥匙都要。
https://stackoverflow.com/questions/29067024
复制相似问题