0

在过去的 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。我没有包含我的映射文件,因为这就是问题所在。我尝试了几种解决方案:

  1. 信封和地址之间的一对一关系。我在信封映射文件中有 2 个一对一的标签,在地址映射文件中有一个一对一的标签。地址映射文件也有一个外部生成器,并且信封上有一个 constrained="true"。NHibernate 抱怨信封和地址之间的一对一映射令人困惑。

  2. 创建了 2 个 FromAddress 和 ToAddress 类,它们都从 Address 派生。Envelope 类现在有一个 FromAddress 和一个 ToAddress(而不是 2 个地址)。我为继承实现了每类表的层次结构。在我的地址映射中,我有:一个外部生成器、2 个子类标签、鉴别器值以及与信封的一对一关系。但是 NHibernate 抱怨不喜欢将鉴别器和一对一放在一起。因此,我将一对一的标签移到了子类标签中。现在 NHibernate 抱怨不知道信封属性是什么(“无法解析属性:信封”)

任何帮助,将不胜感激。

4

1 回答 1

0

信封肯定应该是一对多的地址吗?那是一个信封可以有多个地址(如果您将来有两个以上的地址,这将证明您的代码)

但是,我不确定为什么您没有发布映射,因此无法让 每个子类的表(使用鉴别器)工作。您不需要从地址到信封的双向引用,因为地址继承自信封。

于 2013-02-26T09:13:46.753 回答