在过去的 3 天里,我一直在做这个,但仍然无法弄清楚。从概念上讲,我需要设计一个信封对象及其往返地址(对象)。我有以下数据库架构(我无法更改):
表信封
- 信封 ID (PK)
- 项目清单
- 邮戳日期
表地址
- EnvelopeId(信封中的PK、FK)
- AdressType(1 - 发件人地址,2 - 收件人地址)
- 街道
- 状态
- 邮政编码
*唯一约束 (EnvelopeId, AdressType)
我的课程如下:
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 最终有 2 个对应的地址条目(带有它的主键):一个带有 AddressType 1,一个带有 AddressType 2。我没有包含我的映射文件,因为这就是问题所在。我尝试了几种解决方案:
信封和地址之间的一对一关系。我在信封映射文件中有 2 个一对一的标签,在地址映射文件中有一个一对一的标签。地址映射文件也有一个外部生成器,并且信封上有一个 constrained="true"。NHibernate 抱怨信封和地址之间的一对一映射令人困惑。
创建了 2 个 FromAddress 和 ToAddress 类,它们都从 Address 派生。Envelope 类现在有一个 FromAddress 和一个 ToAddress(而不是 2 个地址)。我为继承实现了每类表的层次结构。在我的地址映射中,我有:一个外部生成器、2 个子类标签、鉴别器值以及与信封的一对一关系。但是 NHibernate 抱怨不喜欢将鉴别器和一对一放在一起。因此,我将一对一的标签移到了子类标签中。现在 NHibernate 抱怨不知道信封属性是什么(“无法解析属性:信封”)
任何帮助,将不胜感激。