2012-04-14 159 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:动态扩展和缩小对象。

如果这不是你正在寻找的,请澄清。