【问题标题】:Create relation one-to-many without Foreign Key in nhibernate4在 nhibernate4 中创建没有外键的一对多关系
【发布时间】:2015-05-11 15:48:57
【问题描述】:

我是 NHibernate 4 的新手,我尝试在 DB2 中的两个表之间创建一对多关系,这些表没有外键,我无法编辑表。 调试应用程序时,我在 .saveorupdate 方法中发现错误。 这些表格包含:

TLMAIN->文章摘要

TLDDETAIL->文章详情

在table的映射下,

TLDMA

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

TLD详细信息

<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

在谷歌我找到了这个错误的原因,这是映射错误,但我没有找到这个。

谢谢你的帮助!!!

【问题讨论】:

  • 表没有外键 那么 TLDDetail 应该如何“加入”到 TLDMAIN 行呢?某处一定有一些信息
  • 当他们使用逻辑键创建表时,两个 PK 表是相同的,不幸的是,这是一个以错误方式创建的旧数据库。
  • 该错误通常不是由键问题引起的,而是由映射问题引起的。检查映射(xml 文件)是否设置为嵌入式资源(xml 文件上的属性、构建操作、嵌入式资源)
  • 然后查看配置文件中的部分,检查是否有&lt;mapping assembly="NHibernateExample2"/&gt;这样的行
  • 问题出在嵌入的属性配置上。谢谢帮忙

标签: c# nhibernate db2 nhibernate-mapping nhibernate-4


【解决方案1】:

该错误似乎与外键问题无关。似乎 NHibernate 找不到 XML 文件。 “常见”问题通常是三个:

  • 必须使用 Build Action = Embedded Resource 设置 XML 文件(在其属性中)
  • 在有&lt;session-factory&gt; 部分(通常是app.config/web.config)的配置文件中,应该有一个&lt;mapping assembly="NHibernateExample2"/&gt;(或任何带有映射的程序集的名称)
  • 第三种可能,在您加载 NHibernate 配置的地方,也许您忘记执行 configuration.Configure()(因为执行 NHibernate.Cfg.Configuration configuration = new NHibernate.Cfg.Configuration(); 还不够,您必须执行 configuration.Configure()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2020-10-03
    • 2011-12-06
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多