1

我正在研究一个遗留系统并引入了流利的 nHibernate,但最后一个映射我似乎无法开始工作。

代码:

public class Permit
    {
    public int PermitId { get; set; }
    public char Discipline { get; set; }
    public PermitDetails PermitDetails { get; set; }
    }

public PermitDetails
    {
    public int PermitId { get; set; }
    }

public class GasPermitDetails : PermitDetails
    {
       ... permit details
    }

public class ElectricalPermitDetails : PermitDetails
    {
       ... permit details
    }

架构:

*tblPermit*
PermitId, int
Discipline, char
.... some other columns

*tblGas*
PermitId, int
....gasDetails

*tblElectrical*
PermitId, int
....electrical details

如果tblPermit.Discipline"G",我们需要把数据取出来tblGas。如果tblPermit.Discipline"E",我们需要把数据取出来tblElectrical。我一直在试图弄清楚这一点,但到目前为止还没有任何运气。

4

2 回答 2

0

(如果 tblPermit.Discipline 是“G”,我们需要从 tblGas 中获取数据。如果 tblPermit.Discipline 是“E”,我们需要从 tblElectrical 中获取数据)。我一直在试图弄清楚这一点,但到目前为止还没有任何运气。

鉴别器字段无关紧要,因为子类型的 PK 字段无论如何都是其超类型表的 FK。所以这是一个每个子类型的表映射。

于 2008-12-28T10:13:52.073 回答
0

在我看来,架构是正确的。您可能需要更具体地了解您遇到的问题,因为我认为所有 PermitDetails 子类的 PermitId 都成为相应关系表的外键。

例如。对于“气体”学科,相关许可证应具有许可证的气体信息。如果 tblGas 中的 PermitID 是 tblPermit 的 id 的外键,则它具有这种关系。像这样:

+---------------+         +----------------------+
|               | 1     1 |                      |
|   tblPermit   |<------->| tblGas               |
|               |         | (for gas discipline) |
|               |         |                      |
+---------------+         +----------------------+
|               |         |                      |
| {PK} PermitId |         | {FK} PermitID        | <- ForeignKey to tblPermit.PermitID
|               |         |                      |
+---------------+         +----------------------+

您不需要“纪律”列来选择正确的数据。您只需要一个查询 tblElectrical, tblGas 在许可证的标识符上。这样,您将获得许可证及其信息。

(PS。不好意思使用UML类图来可视化数据库表,但是乌鸦脚记法在ASCII中翻译得不好)

于 2008-12-27T21:54:41.347 回答