我已經在過去的3天,仍然無法弄清楚。從概念上講,我需要設計一個信封對象及其來往地址(對象)。我有以下的數據庫架構(我不能改變):一對一NHibernate映射
表信封
- EnvelopeId(PK)
- 列表項
- PostmarkDate
表地址
- EnvelopeId(PK,FK in Envelope)
- AdressType(1 - 從地址,2 - 對於要把地址)
- 街
- 國家
- 郵編
*上(EnvelopeId,AdressType)
我的班唯一contraint如下:
public class Envelope
{
public virtual long EnvelopeId { get; set; }
public virtual DateTime PostmarkDate { get; set; }
public virtual Address FromAddress { get; set; }
public virtual Address ToAddress { get; set; }
}
public class Address
{
public virtual AddressId { get; set; }
public virtual Envelope Envelope { get; set; }
public virtual AdressType { get; set; }
public virtual Street { get; set; }
public virtual State { get; set; }
public virtual ZipCode { get; set; }
}
因此,Envelope最終有兩個對應的地址條目(帶有主鍵):一個具有AddressType 1和一個具有AddressType 2.我沒有包含映射文件,因爲這是問題所在。我嘗試了幾種解決方案:
Envelope和Address之間的一對一關係。我在信封映射文件中有兩個一對一標記,地址映射文件中有一對一標記。地址映射文件在Envelope上也有一個外部生成器和一個constrained =「true」。 NHibernate抱怨Envelope和Address之間的一對一映射令人困惑。
創建了2個FromAddress和ToAddress類,這兩個類都來自Address。信封類現在有一個FromAddress和一個ToAddress(而不是2個地址)。我爲繼承實現了表級類層次結構。在我的地址映射中,我有:外部生成器,2個子類標記,鑑別器值和與Envelope的一對一關係。但NHibernate抱怨不喜歡歧視和一對一。於是我把一對一的標籤移到了子類標籤中。現在NHibernate抱怨不知道什麼是信封屬性(「無法解析屬性:信封」)
任何幫助,將不勝感激。
您的課程不符合您的表格。在信封中,刪除地址欄。adressFrom和addressTo變量將具有(應該有)指向信封的指針。 – dmaij 2013-02-25 19:22:39
我確實希望在信封和地址之間的類中建立雙向關係。關係是Envelope有一個Address From和一個Address To,並且這些地址屬於Envelope。最好的情況是,我可以在Address中使用Envelope成員變量,但我無法從Envelope類中刪除FromAddress和ToAddress成員變量。感謝您的回覆。 – MrTibs 2013-02-25 21:35:31
您是否使用XML映射或通過代碼或流利映射? – Rippo 2013-02-26 08:14:47