2012-04-14 215 views
0

我想用動態特性,這是這樣的:動態/自定義屬性

public class CustomProperty 
{ 
    public string PropType { get; set; } 
    public string PropValue { get; set; } 
    public string PropName { get; set; } 
    ... 
} 

...,然後保存這些屬性數據庫,就像這樣:

PropType PropValue PropName 
-------- --------- -------- 
String  "William" "Name" 
Int64  "21"  "Age" 
String  "John"  "Name" 
Int64  "32"  "Age" 
String  "Brown"  "Haircolor" 
... 

我不要以爲我是第一個有這樣的想法的人,所以我正在尋找一個實現(poen source/nuget等)。但我很難找到一個。

所以我的問題是:是否有一個可以使用(或改進,如果需要)的動態特性的實現?

編輯:由於richardtallent指針了,我正在尋找EAV模式。那麼,是否有可以使用的實現?或者我必須自己寫點東西。我認爲之前已經做過很多次了。

+0

你有沒有試過LINQ到SQL,如果這是你要找的東西? – 2012-04-14 06:11:11

回答

2

您所描述的內容通常稱爲「EAV」(實體 - 屬性 - 值)模式。

許多人認爲它應用於關係數據庫時反模式,因爲使用它會影響維護正確的規範化數據和有效的CRUD操作。但是,它的確有其用途。

此主題的變體用於從Lotus Notes到Google BigTable的無SQL數據庫。因此,如果您不想使用SQL Server,最好的辦法可能是查看C#可訪問的非SQL數據庫,例如MongoDB。

如果您正在尋找序列化爲傳統RDBMS的東西,我不知道任何開放源代碼解決方案。在C#中有ExpandoObjects,但我不知道該系統是否包含開箱即用的數據庫序列化/反序列化。

+0

是的,我認爲EAV就是我正在尋找的東西。具體來說:包括序列化EAV模式的實現。 – user369117 2012-04-14 07:02:01

1

從4.0版本開始有Expando object:動態擴展和縮小對象。

如果這不是你正在尋找的,請澄清。