我有以下对象模型:
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(int),DESCRIPTION(字符串)
B:ID(int),DESCRIPTION(字符串),A_ID(int)
C:ID(int),DESCRIPTION(字符串),B_ID(int)
D:ID(int),DESCRIPTION(字符串),C_ID(int),A_ID(int)
在表D中,A_ID是表A主键的外键。最初这样做是为了让您可以从ObjectA
:ObjectD
轻松访问ObjectD.A
。这导致表A中的ID必须以这种方式添加到想要访问ObjectA
的每个表中,从而对数据库进行反规范化(假设有ObjectE
和ObjectF
所有想要轻松访问ObjectA
)。在这种情况下,ObjectB
将始终引用ObjectA
。
我想在我的所有表中删除对A_ID的引用,但我希望能够从我的类中轻松访问ObjectA
。我知道我可以在需要时ObjectD.ObjectC.ObjectB.ObjectA
获得ObjectA
,但这似乎无法延迟加载我的对象。
如何映射我的ObjectD
,以便在ObjectA
的表格中没有ObjectA
ID的情况下直接访问ObjectD
?
注意:我正在使用hbm / xml文件来映射我的课程。
答案 0 :(得分:1)
在我看来,出于性能原因,您要么使用冗余数据,要么不这样做。我无法想到第三种选择。 (但有更好的NHibernate思想可以纠正这种观点)。
如果这些对象的读取比写入要高得多,并且用例在大多数情况下需要访问ObjectA,那么冗余就可以了。否则,您引用的ObjectD.C.B.A方法开始变得更具吸引力。