2012-09-14 59 views
1

L2S方法我們使用L2S,我們有這樣一個類:的接口屬性

public class HumanContainer 
{ 
    public List<IHuman> Humans { get; set; } 
    public string SomeOtherProperty { get; set; } 
} 

我們的數據庫有表像這樣:
HumanContainer
- 野人

我們」到目前爲止,人類只有一種人類(極客)。當我們向/從數據庫發送/檢索HumanContainers時,我們知道將它們視爲極客。現在我們需要第二個人類(運動員),我們可以選擇如何實現這一點。

一種選擇是在數據庫中創建另一個表(運動員):
HumanContainer
- 野人
- 運動員

對於這樣的每一個新的具體的人,我們會通過需要循環HumanContainer.Humans,檢測類型,將其添加到適當的EntitySet <>,然後保存。

另一種選擇是隻有一個對所有人類表:
HumanContainer
- 人類

如果我們這樣做,那麼我們就需要這樣的東西,我們序列化人力爲XML列它的具體類型並將其存儲在該列中。然後,我們需要在檢索數據時反序列化該列。

建議的方法之一?我很想知道人們是如何處理這種情況的。有沒有第三種方法,我沒有在這裏列出?

回答

1

正如我理解你的問題,在你的情況未來可能有不同類型的人。您可以嘗試以下解決方案。

解決方案1:

就像你提到的只有在數據庫中創建「Humas」一個表和序列化人類帶入特定的類型,並將其存儲在該列和檢索數據時反序列化列。這個解決方案看起來不錯,因爲如果將來需要任何人類類型,我們不需要更改數據庫設計。並易於管理。

但是這種解決方案的DIS優點是,如果應用程序只需要野人人類類型,則首先需要檢索列數據和反序列化後,我們可以找到野人人型。

解決方案2:

在數據庫中創建兩個表。 1)HumanType:用於保存人類類型(極客,運動員或任何其他類型) 2)人類:存儲人類信息。該表包含HumanType的引用鍵。

該解決方案的優點是,您可以根據需求輕鬆觸發查詢(例如,g只有極客類型人類從表格中輕鬆獲取)。並且如果有任何新的人類類型出現,則需要輸入HumanType數據庫中的一個條目。