NHibernate的多对一​​映射问题

时间:2009-12-13 14:42:51

标签: nhibernate nhibernate-mapping

首先,我对NHibernate相对较新。在TaxMapping和Address上有两个表。单个TaxMapping必须具有一个地址,并且一个地址可以属于多个Tax Mapping。它们通过外键链接

TaxMapping hbm

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="ITAPDTO" assembly="ITAPDTO">
<class name="TaxMapping" table="tblTaxMapping">
<id name="Tax_Mapping_ID">
  <column name="Tax_Mapping_ID" sql-type="bigint" not-null="true"/>
  <generator class="identity" />
</id>
<property name="Tax_ID" />
<property name="Client_Code" />
<property name="NRA_Sub_Account" />
<property column="Domicile" type="String" name="Domicile" length="5" />    
<many-to-one name="Address"   column="AddressID" cascade="none" not-found="exception"  not-null="true"  fetch="join"    class="ITAPDTO.Address,ITAPDTO" />
</class>
</hibernate-mapping>




<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="ITAPDTO" assembly="ITAPDTO">

<class name="Address" table="Address">
<id name="AddressID" column="AddressID" type="Int32" unsaved-value="0">
  <generator class="identity"/>
</id>
<property column="Client" type="String" name="Client" not-null="true" length="100" />
<property column="Contact" type="String" name="Contact" not-null="true" length="50" />
<property column="Address1" type="String" name="Address1" not-null="true" length="100" />
<property column="Address2" type="String" name="Address2" not-null="true" length="100" />
<property column="Address3" type="String" name="Address3" not-null="true" length="100" />
<property column="City" type="String" name="City" not-null="true" length="50" />
<property column="State" type="String" name="State" not-null="true" length="50" />
<property column="PoBox" type="String" name="PoBox" not-null="true" length="50" />
<property column="PostCode" type="String" name="PostCode" not-null="true" length="20" />
<property column="Country" type="String" name="Country" not-null="true" length="50" />
<property column="InsertedBy" type="String" name="Modified_By" length="20" />
<property column="InsertedOn" type="DateTime" name="Modified_Date" />
<property column="ConfirmedBy" type="String" name="Approved_By" length="20" />
<property column="ConfirmedOn" type="DateTime" name="Approved_Date" />
<property column="Status" type="String" name="Status" />
<property column="IUD" type="String" name="IUD" />
</class>
</hibernate-mapping>

我可以拉入数据并绑定到网格视图,没有任何问题。但是,当我更新Taxmapping时,Address oject的AddressID始终为null事件虽然其他地址字段已正确填充,但我不知道原因。我目前有一个hack到位,在我调用update之前从db中提取id,但我真的不应该这样做。任何想法都会受到欢迎 问候

2 个答案:

答案 0 :(得分:0)

这是由于Taxmapping对象的Address属性中级联设置为“none”吗?尝试将其更改为“保存更新”。您可能还想阅读nhibernate文档以确定哪种级联设置最适合您的情况,尽管听起来像“save-update”最合适。

答案 1 :(得分:0)

除了Krazzy的观点,您还应检查您的会话是否已关闭和/或正确刷新。永远不会刷新的长时间会话可能会出现类似的问题。

相关问题