2015-03-10 14 views
0

Я новичок в NHibernate 4, и я пытаюсь создать отношение «один ко многим» между двумя таблицами в DB2, таблицы не имеют внешнего ключа и Я не могу редактировать таблицы. При отладке приложения i улавливает ошибку в методе .saveorupdate. Таблицы содержат:Создать отношение один-ко-многим без внешнего ключа в nhibernate4

TLDMAIN-> Резюме статьи

TLDDETAIL-> деталь статьи

При отображении таблицы,

TLDMAIN

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateExample2" 
        namespace="NHibernateExample2.NHibernateMappings" 
        schema="RM2T4" 
        > 
    <class name="TLDMAIN" table="TLDMAIN"> 
    <id name="DGINAD" column="DGINAD" type="System.String"> 
     <generator class="assigned" /> 
    </id> 
    <property name="DGSEDE" column="DGSEDE" type="System.String" /> 
    <property name="DGZONA" column="DGZONA" type="System.String" /> 
    <property name="DGCEOP" column="DGCEOP" type="System.String" /> 
    <property name="DGSEDEC" column="DGSEDEC" type="System.String" /> 
    <property name="DGZONAC" column="DGZONAC" type="System.String" /> 
    <property name="DGCEOPC" column="DGCEOPC" type="System.String" /> 
    <property name="DGRLAV" column="DGRLAV" type="System.String" /> 
    <property name="DGCFDDL" column="DGCFDDL" type="System.String" /> 
    <property name="DGCFLAV" column="DGCFLAV" type="System.String" /> 
    <property name="DGDTDOM" column="DGDTDOM" type="System.String" /> 
    <property name="DGTIPREGO" column="DGTIPREGO" type="System.String" /> 
    <property name="DGDTINTER" column="DGDTINTER" type="System.String" /> 
    <property name="DGNRATE" column="DGNRATE" type="System.Int32" /> 
    <property name="DGIMPRATA" column="DGIMPRATA" type="System.Decimal" /> 
    <property name="DGPRECALC" column="DGPRECALC" type="System.String" /> 
    <property name="DGSTCORR" column="DGSTCORR" type="System.String" /> 
    <property name="DGTIMEST" column="DGTIMEST" type="System.String" /> 
    <property name="DGNOTE" column="DGNOTE" type="System.String" /> 
    <bag name="periodi" table="TLDDETAIL" lazy="false"> 
     <key column="DDINAD" /> 
     <one-to-many class="NHibernateExample2.NHibernateMappings.TLDDETAIL" /> 
    </bag> 
    </class> 
</hibernate-mapping> 

TLDDETAIL

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateExample2" 
        namespace="NHibernateExample2.NHibernateMappings" 
        schema="RM2T4" 
        > 
    <class name="TLDDETAIL" table="TLDDETAIL"> 
    <id name="DDINAD"  column="DDINAD" type="System.String"> 
     <generator class="assigned" /> 
    </id> 
    <property name="DDANNO"  column="DDANNO" type="System.Int32" /> 
    <property name="DDTRIM"  column="DDTRIM" type="System.Int32" /> 
    <property name="DDPROG"  column="DDPROG" type="System.Int32" /> 
    <property name="DDORERET" column="DDORERET" type="System.Int32" /> 
    <property name="DDTIPCAL" column="DDTIPCAL" type="System.String" /> 
    <property name="DDRETEFF" column="DDRETEFF" type="System.Decimal" /> 
    <property name="DDSETALL" column="DDSETALL" type="System.String" /> 
    <property name="DDSETT1" column="DDSETT1" type="System.String" /> 
    <property name="DDSETT2" column="DDSETT2" type="System.String" /> 
    <property name="DDSETT3" column="DDSETT3" type="System.String" /> 
    <property name="DDSETT4" column="DDSETT4" type="System.String" /> 
    <property name="DDSETT5" column="DDSETT5" type="System.String" /> 
    <property name="DDSETT6" column="DDSETT6" type="System.String" /> 
    <property name="DDSETT7" column="DDSETT7" type="System.String" /> 
    <property name="DDSETT8" column="DDSETT8" type="System.String" /> 
    <property name="DDSETT9" column="DDSETT9" type="System.String" /> 
    <property name="DDSETT10" column="DDSETT10" type="System.String" /> 
    <property name="DDSETT11" column="DDSETT11" type="System.String" /> 
    <property name="DDSETT12" column="DDSETT12" type="System.String" /> 
    <property name="DDSETT13" column="DDSETT13" type="System.String" /> 
    <property name="DDSETT14" column="DDSETT14" type="System.String" /> 
    <property name="DDSETT15" column="DDSETT15" type="System.String" /> 
    <property name="DDINTEGR" column="DDINTEGR" type="System.String" /> 
    <property name="DATEPAG" column="DATEPAG" type="System.String" /> 
    <property name="FLAGPAG" column="FLAGPAG" type="System.String" /> 
    <property name="DDPARTITA" column="DDPARTITA" type="System.String"/> 
    <property name="DDPROGPART" column="DDPROGPART" type="System.String"/> 
</class> 
</hibernate-mapping> 

Ошибка это Нет стойкая бактерия для: NHibernateExample2.NHibernateMappings.TLDMAIN

В гугле я нашел причину этой ошибки, это не ошибка в отображении, но я не нашел это.

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

+0

* таблицы не имеют внешнего ключа * Тогда как должен быть присоединен TLDDetail к строкам TLDMAIN? Должна быть какая-то информация где-то – xanatos

+0

, когда они создали таблицу, они использовали логические ключи, две таблицы PK идентичны, к сожалению, старая БД создана не так. –

+0

Эта ошибка обычно не вызвана проблемами с ключами, а проблемами с сопоставлениями. Убедитесь, что сопоставления (файлы xml) заданы как Embedded Resource (Свойства в файле xml, Build Action, Embedded Resource). – xanatos

ответ

1

Эта ошибка, похоже, не связана с проблемами с внешними ключами. Похоже, что NHibernate не может найти файлы XML. В «общие» проблемы, как правило, три:

  • файлы XML должны быть установлены (в их свойствах) с моделировочной Action = Embedded Resource
  • В конфигурационном файле, где есть <session-factory> раздел (обычно приложение. конфиг/web.config), должно быть <mapping assembly="NHibernateExample2"/> (или любой другой узел с отображениями названо)
  • третьей возможностью, где вы загружаете конфигурацию NHibernate, возможно, вы забыли сделать configuration.Configure() (потому что делать NHibernate.Cfg.Configuration configuration = new NHibernate.Cfg.Configuration(); ISN» t достаточно, вы должны сделать configuration.Configure())