Нужен доступ к таблице со строковым первичным ключом в nHibernate - PullRequest
0 голосов
/ 27 октября 2011

Я пытаюсь сопоставить базу данных SQL Server с nHibernate, который полон таблиц с varchar первичными ключами, сгенерированными внешним программным обеспечением, и мне нужен доступ для обновления / чтения (без вставки).

Я не могу найти способ обойти следующую ошибку:

XXXX.Tests.GMCRepository_Fixture.Can_get_existing_GMC_by_parameter'
failed: NHibernate.MappingException :
XXXX.Domain.Mappings.GMC2.hbm.xml(4,6): XML validation error: The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'property' in     namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-    mapping-2.2'.

Исследования показали, что эта ошибка связана с тем, что не определен действительный первичный ключ (id).

Отображение XML выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="XXXX.Domain" namespace="XXXX.Domain" xmlns="urn:nhibernate-mapping-2.2" schema="GM.dbo">
  <class name="GMC2" table="C2" lazy="true" >
    <property name="PARAMETER">
      <column name="PARAMETER" sql-type="varchar" not-null="true" />
    </property>
    ...
    <id name="Recid">
      <column name="recid" sql-type="varchar" not-null="true" />
    </id>
  </class>
</hibernate-mapping>

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 27 октября 2011

Я считаю, что условием является отображение идентификатора в качестве первого элемента в объявлении класса.Также в качестве части отображения идентификатора необходимо указать Генератор идентификатора.В вашем случае, я думаю, вам потребуется назначенный генератор , добавленный к вашему идентификатору.Ваше отображение классов будет выглядеть примерно так:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping assembly="XXXXCRMAPI.Domain" namespace="XXXXCRMAPI.Domain" xmlns="urn:nhibernate-mapping-2.2" schema="GoldMine.dbo"> 
  <class name="GMContact2" table="CONTACT2" lazy="true" > 
    <id name="Recid"> 
      <generator type="assigned" />
      <column name="recid" sql-type="varchar" not-null="true" /> 
    </id> 
    <property name="Accountno"> 
      <column name="ACCOUNTNO" sql-type="varchar" not-null="true" /> 
    </property> 
    ... 

  </class> 
</hibernate-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...