2011-04-04 73 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方法開始變得更有吸引力。

相關問題