动态/自定义属性

时间:2012-04-14 06:09:12

标签: c# dynamic properties dynamic-properties

我想使用动态属性,如下所示:

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模式。那么,是否有可以使用它的实现?或者我必须自己写点什么。我认为以前已经做过很多次了。

2 个答案:

答案 0 :(得分:2)

您所描述的内容通常称为“EAV”(实体 - 属性 - 值)模式。

许多人认为它在应用于关系数据库时是一种反模式,因为使用它会对维护正确的规范化数据和高效的CRUD操作产生影响。但是,它确实有其用途。

此主题的变体用于从Lotus Notes到Google BigTable的No-SQL数据库。因此,如果您不喜欢使用SQL Server,最好的办法是调查C#-accessible No-SQL数据库,例如MongoDB。

如果您正在寻找与传统RDBMS序列化的内容,我不会发现任何开源解决方案。在C#中有ExpandoObjects,但我不知道该系统是否包含开箱即用的数据库序列化/反序列化。

答案 1 :(得分:1)

从4.0版开始有Expando object:动态扩展和缩小对象。

如果这不是您要搜索的内容,请澄清。