我已经在过去的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