NHibernate将列映射到属性和包

NHibernate将列映射到属性和包,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我在绘制以下位置时遇到一些困难: 我有一个人有一个连接id,我用这个来获取一个包和一个属性的地图。 如果数据库已经存在,则此操作有效。但是对于我们的单元测试,我们从模式生成一个,它给出了一个错误:“重复的列名” 以下是映射: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="DomainLayer.SearchD

我在绘制以下位置时遇到一些困难:

我有一个人有一个连接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”在包的键属性中与在属性中一样

编辑:

语言技能映射:

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

它实际上应该可以工作。这可能是因为你在一种情况下用了`标记,但在另一种情况下没有

试试这个:

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

原因实际上是该列在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`" />


更新:nevermind,Stefan知道了

包中的键列会影响另一个表而不是表WN,所以这不会是问题所在。也张贴语言技能的映射,因为我怀疑那里有错误是的,你是对的。LanguageSkill的映射包含一个属性ConnectionId(列名“koppelid”)。我在OP中添加了语言技能映射。这就成功了!非常感谢,我不知道这对创作有什么影响。你说的反过来也是对的,问题是我不能这样做,因为SearchPerson是严格的搜索域,而languageskill是在普通域中。不过还是要谢谢你!