2011-04-04 109 views
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;} 
} 

我的表如下所示:

答:ID(INT),描述(字符串)

B:ID(INT),描述(字符串),A_ID(INT)

C:ID(INT),描述(字符串),B_ID(INT)

D:ID(int),DESCRIPTION(字符串),C_ID(int),A_ID(int)

在表D中A_ID是表A的主键的外键。最初这样做是为了您可以从ObjectD轻松访问ObjectAObjectD.A。这导致来自表A的ID必须被添加到想要以这种方式去访问ObjectA的每个表中(想象具有ObjectEObjectF,都想要容易地访问ObjectA)。在这种情况下,ObjectB将始终引用ObjectA

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

我该如何映射我的ObjectD,这样我可以有ObjectA直接访问,而“在ObjectD的ID的表有ObjectA

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

回答

1

在我看来,无论是出于性能原因还是使用冗余数据,或者您都不知道。我无法想象第三种选择。 (但是有更好的NHibernate可以解决这个问题)。

如果这些对象的读取比写入要高得多,并且用例大部分时间需要访问ObjectA,那么使用ObjectD的时候冗余就没有问题了。否则,你引用的ObjectD.C.B.A方法开始变得更有吸引力。

相关问题