Создать отношение один-ко-многим без внешнего ключа в nhibernate4

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

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

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

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

1 ответ

Решение

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

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