简体   繁体   English

在nhibernate4中不使用外键创建一对多关系

[英]Create relation one-to-many without Foreign Key in nhibernate4

i'm new to NHibernate 4 and i try to create a one-to-many relation between two table in DB2, the tables don't have a foreign key and i can't edit the tables. 我是NHibernate 4的新手,我尝试在DB2中的两个表之间创建一对多关系,这些表没有外键,并且我无法编辑这些表。 When debug the application i catch error in .saveorupdate method. 调试应用程序时,我在.saveorupdate方法中捕获错误。 The tables contains: 这些表包含:

TLDMAIN->summary of article TLDMAIN->文章摘要

TLDDETAIL->detail of article TLDDETAIL->文章的详细信息

Under the mapping of table, 在表的映射下,

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

The error it's No persister for: NHibernateExample2.NHibernateMappings.TLDMAIN 该错误没有持久性的错误:NHibernateExample2.NHibernateMappings.TLDMAIN

In google i found the cause of this error, it's error in mapping but i don't have found this. 在谷歌我发现了这个错误的原因,这是映射中的错误,但我还没有发现这个。

Thank's for help!!! 感谢帮助!!!

That error doesn't seems to be connected to problems with the foreign keys. 该错误似乎与外键问题无关。 It seems to be that the NHibernate can't find the XML files. 看来NHibernate找不到XML文件。 The "common" problems are normally three: “常见”问题通常是三个:

  • The XML files must be set (in their Properties) with the Build Action = Embedded Resource 必须使用Build Action = Embedded Resource设置XML文件(在其属性中)。
  • In the configuration file where there is the <session-factory> section (normally app.config/web.config), there should be a <mapping assembly="NHibernateExample2"/> (or whatever the assembly with the mappings is named) 在配置文件中,其中有<session-factory>部分(通常为app.config / web.config),应该有一个<mapping assembly="NHibernateExample2"/> (或任何带有映射的程序集被命名)
  • Third possibility, where you load the NHibernate configuration, perhaps you forgot the to do the configuration.Configure() (because doing NHibernate.Cfg.Configuration configuration = new NHibernate.Cfg.Configuration(); isn't enough, you have to do configuration.Configure() ) 第三种可能性,在加载NHibernate配置的地方,也许您忘记了进行configuration.Configure() (因为执行NHibernate.Cfg.Configuration configuration = new NHibernate.Cfg.Configuration();还不够,您必须做configuration.Configure()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM