2010-07-19 66 views
0

通過以下映射,BillingAddress.Country被正確映射,但ShippingAddress.Country始終爲空。也許這是因爲相同的屬性名稱?但他們是不同的對象...任何想法如何解決它? 提前致謝。組件問題內的「多對一」NHibernate

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="KapsNet.QuickOffice.Models" namespace="KapsNet.QuickOffice.Dto"> 
<class name="Order" table="`Order`" > 
    <id name="ID" type="System.Int32" column="ID"> 
    <generator class="identity"/> 
    </id> 
    <property name="CreateDate" column="CreateDate" type="System.DateTime" not-null="true" /> 
    <property name="ClientContactID" column="ClientContactID" type="System.Int32" not-null="true" /> 
    <component name="BillingAddress" class="AddressInfo"> 
    <property name="Address" column="BillingAddress" type="System.String" not-null="false" length="255"/> 
    <property name="ZipCode" column="BillingZipCode" type="System.String" not-null="false" length="50"/> 
    <property name="City" column="BillingCity" type="System.String" not-null="false" length="50"/> 
    <property name="CountryID" column="BillingCountryID" type="System.Int32" not-null="true" /> 
    <property name="Phone" column="BillingPhone" type="System.String" not-null="false" length="50"/> 
    <many-to-one name="Country" column="BillingCountryID" class="Country" update="0" insert="0" /> 
    </component> 
    <component name="ShippingAddress" class="AddressInfo"> 
    <property name="Address" column="ShippingAddress" type="System.String" not-null="false" length="255"/> 
    <property name="ZipCode" column="ShippingZipCode" type="System.String" not-null="false" length="50"/> 
    <property name="City" column="ShippingCity" type="System.String" not-null="false" length="50"/> 
    <property name="CountryID" column="ShippingCountryID" type="System.Int32" not-null="true" /> 
    <property name="Phone" column="ShippingPhone" type="System.String" not-null="false" length="50"/> 
    <many-to-one name="Country" column="ShippingCountryID" class="Country" update="0" insert="0" /> 
    </component> 
    <many-to-one name="ClientContact" column="ClientContactID" class="ClientContact" update="0" insert="0" /> 
    <bag name="OrderItemList" table="OrderItem" inverse="true" lazy="true" cascade="delete"> 
    <key column="OrderID" /> 
    <one-to-many class="OrderItem"/> 
    </bag> 
</class> 
</hibernate-mapping> 

回答

1

,因爲它在許多一對一關係到國家已經定義應該從映射刪除CountryID計費和送貨地址。除此之外,映射看起來沒問題。如果組件中的所有值均爲空,則組件將爲空。因此,如果所有送貨地址字段均爲空,則ShippingAddress組件將爲空。

+0

問題是,只有Country字段對於ShippingAddress實體爲空,而CountryID = 1。另一方面,BillingAddress也具有CountryID = 1,但Country字段綁定爲好(非空)。 ShippingAddress的所有其他字段都是綁定的okey。關於CountryID - 由於後期綁定原因,hbm生成器創建這些字段 - 當您只需要ID但不是完整對象時,它對性能有好處。 – McWest 2010-07-20 13:04:41