NHibernate将列映射到属性和包

时间:2012-07-05 13:58:34

标签: nhibernate nhibernate-mapping

我在绘制以下内容时遇到了一些困难:

我有一个有连接ID的人,我使用它来获取地图包和财产。 如果数据库已存在,则此方法有效。但是对于我们的单元测试,我们从模式生成一个,它给出了一个错误:“重复的列名”。

以下是映射:

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="DomainLayer.SearchDomain" assembly="Test">
  <class name="SearchPerson" table="person" lazy="false" mutable="false">
    <id name="Id" column="`id`" type="int">
      <generator class="identity" />
    </id>
    <property name="Name" column="`NAAM`" type="string"  />
    <property name="FirstName" column="`VOORNAAM`" type="string"  />
    <property name="ConnectionId" column="`Koppelid`" type="int" />
    <bag name="Languages" lazy="false" mutable="false" access="field.camelcase-underscore">
      <key property-ref="ConnectionId" column="Koppelid" />
      <one-to-many class="DomainLayer.Person.LanguageSkill, Test" />
    </bag>
  </class>
</hibernate-mapping>

问题:“Koppelid”在包中的Key属性中都与属性一样。

修改

LanguageSkill映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="DomainLayer.Person" assembly="Test">
  <class name="LanguageSkill" table="languageskill" lazy="false">
    <id name="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="ConnectionId" column="`KoppelId`" type="Int64"  />
    <property name="Remark" column="`Opmerking`" type="string"  />
    <property name="Source" column="`CdOorsprong`" type="string"  />
    <property name="MotherTongue" column="`moedertaal`" type="boolean"  />
    <property name="ModifiedDate" column="`wyzdat`" type="DateTime"  />
  </class>
</hibernate-mapping>

2 个答案:

答案 0 :(得分:1)

它应该真的有效。可能是因为你在一个案例中用`标记了它,而在另一个案例中没有标记它。

试试这个:

<bag ...>
    <key property-ref="ConnectionId" column="`Koppelid`" />

答案 1 :(得分:0)

原因实际上是在LanguageSkillMapping中定义了两次列。由于您映射了列,因此可以将其映射为引用并将包设置为反向

<bag name="Languages" inverse="true" lazy="false" mutable="false" access="field.camelcase-underscore">
  <key property-ref="ConnectionId" column="Koppelid" />
  <one-to-many class="DomainLayer.Person.LanguageSkill, Test" />
</bag>


<many-to-one name="SearchPerson" column="`KoppelId`" />

更新:没关系,Stefan得到了它