0

我有以下对象模型:

class ObjectA{
    public string Description {get;set;}
}

class ObjectB{
    public string Description {get;set;}
    public ObjectA A {get;set;}
}

class ObjectC{
    public string Description {get;set;}
    public ObjectB B {get;set;}
}

class ObjectD{
    public string Description {get;set;}
    public ObjectC C {get;set;}
    public ObjectA A {get;set;}
}

我的表格如下:

A:ID(整数),描述(字符串)

B:ID(整数),DESCRIPTION(字符串),A_ID(整数)

C: ID(int)、DESCRIPTION(字符串)、B_ID(int)

D:ID(整数),描述(字符串),C_ID(整数),A_ID(整数)

在表 D 中,A_ID 是表 A 主键的外键。最初这样做是为了方便您ObjectAObjectD:访问ObjectD.A。这导致必须将表 A 中的 ID 添加到每个想要以ObjectA这种方式访问​​的表中,从而使数据库非规范化(想象一下ObjectEObjectF所有想要轻松访问的表ObjectA)。在这种情况下ObjectB,将始终引用ObjectA.

我想摆脱所有表中对 A_ID 的引用,但我希望能够ObjectA从我的类中轻松访问。我知道我可以在需要的时候ObjectD.ObjectC.ObjectB.ObjectA得到ObjectA,但这似乎违背了延迟加载对象的目的。

如何映射我的ObjectD,以便我可以直接访问而ObjectA无需ObjectA在 ' 表中的 ID ObjectD

注意:我使用 hbm/xml 文件来映射我的类。

4

1 回答 1

1

在我看来,您要么出于性能原因使用冗余数据,要么不使用。我想不出第三种选择。(但是那里有更好的 NHibernate 思想可以纠正这种观点)。

如果这些对象的读取量远高于写入量,并且在大多数情况下您使用 ObjectD 时,用例需要访问 ObjectA,那么冗余就可以了。否则,您提到的 ObjectD.CBA 方法开始变得更具吸引力。

于 2011-04-05T00:21:38.533 回答