2013-09-24 42 views
2

您是否知道如何將類的屬性映射到表中的行? 讓我們有一個表[ID,KEY,VALUE]。EF:將類屬性映射到行而不是列

我想爲預定義的鍵值(例如屬性)映射的屬性在類中,從值列取值。

例:

--------------------------------- 
| ID | Key  | Value  | 
--------------------------------- 
| 1 | Name  | Jon   | 
--------------------------------- 
| 2 | Surname | Doe   | 
--------------------------------- 

public class Bar 
{ 
    public string Name { get; set; } 
    public string Suname { get; set; } 
} 

是否有EF什麼來實現這個還是我寫我自己的自定義代碼?

BR

回答

1

您無法將列中的值映射到屬性。因此你有鍵值表,那麼我建議你將表內容讀入字典。

首先,你應該有實體對應於表的列名的屬性:

public class Foo 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 
} 

在映射此實體的表,可以讀取所有表的內容到詞典:

var values = context.Foos.ToDictionary(f => f.Key, f => f.Value); 

現在你可以很容易地通過鍵獲取值:

var name = values["Name"]; 

你甚至可以使用這個dictiona ry作爲您的物業的後備商店:

public void Bar 
{ 
    private Dictionary<string, string> values = 
     context.Foos.ToDictionary(f => f.Key, f => f.Value); 

    public string Name { get { return values["Name"]; } } 
    public string Surname { get { return values["Surname"]; } } 
} 
+0

情況並非如此。我想有一個屬性映射到ROW而不是COLUMN。 – mdzieg

+0

@mdzieg你不能那樣做 –

+1

謝謝,我喜歡這種方法與字典 – mdzieg

0

這不是數據庫的工作原理。每一行都是一個獨立的實體。每列是實體的單獨屬性。如果您僅將數據庫用作鍵/值對,則不要使用關係數據庫。看一下像Riak或MongeDB這樣的NoSQL選項。如果這只是單個配置對象,另一種選擇是使用xml或配置文件。

現在,我不明白如何在你的例子中,你可以把名字和姓氏連在一起成爲一個總的對象。我不相信這是可能的。

+0

希望保持這些設置在數據庫中的一致性。其實這可能是可能的。您可以將表名和屬性列指向類級別的屬性,然後爲每個屬性定義其行值。我與擁有這種類型表的DB一起工作。將不得不寫我自己的代碼來處理這個我想。 – mdzieg

相關問題