我有一個地址類,我想用於其他對象的地址信息。下面我粘貼2示例類公司和個人使用Address類類設計和NHibernate映射問題
public class Company
{
public virtual string Name { get; set; }
public virtual string Phone { get; set; }
public virtual string Fax { get; set; }
public virtual Address Address { get; set; }
}
public class Person
{
public virtual string Name { get; set; }
public virtual string Phone { get; set; }
public virtual string Fax { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public virtual string Address1 { get; set; }
public virtual string CityName { get; set; }
public virtual string StateName { get; set; }
public virtual string CountryName { get; set; }
public virtual AddressOf AddressOf { get; set; }
public virtual object Owner { get; set; }
}
public enum AddressOf : byte
{
Company,
Person
}
我的計劃是有一個地址表,我會保持公司的客戶等的地址 每個地址都有其唯一的ID,並關聯到通過另一個owner_id和owner_type列的地址的所有者。
我通常的做法是在所有需要地址信息的表上填寫地址列(然後我可以爲nhibernate執行組件映射),但現在我想這可能不是必需的,我可以收集所有地址一張公共桌..
現在我的挑戰是我如何將這些映射到nhibernate。我認爲一個一對一的映射,但無法弄清楚如何我將映射應該從所有者/公司被foreignly產生owner_id柱,人等
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >
<class name="Company" table="Companiess">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Name" />
<property name="Phone" />
<property name="Fax" />
<one-to-one name="Address" class="Address" />
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Addresses" table="Addresses ">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Address1" />
<property name="CityName" />
<property name="StateName" />
<property name="CountryName" />
<one-to-one "here is where im having trouble, I need to map owners id to owner_id column of Addresses table" ></one-to-one>
</class>
</hibernate-mapping>
如果你看到一個結構問題,亦請告知我知道,因爲我之前沒有使用過單獨的地址表,並且我對此還不完全適應。 謝謝!
此方法讓我考慮將地址字段保留在同一張表而不是單獨的表上,因爲它看起來像這樣會使事情變得複雜......(如果沒有更好的解決方案,我會將它標記爲答案) – kaivalya 2009-07-16 14:57:10