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 模式。那么,有没有可以使用的实现呢?还是我必须自己写一些东西。我想以前已经做过很多次了。

4

2 回答 2

2

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

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

此主题的变体用于从 Lotus Notes 到 Google BigTable 的 No-SQL 数据库。因此,如果您不依赖于使用 SQL Server,那么最好的选择可能是研究 C# 可访问的 No-SQL 数据库,例如 MongoDB。

如果您正在寻找可以序列化到传统 RDBMS 的东西,我不知道有任何开源解决方案。在 C# 中有 ExpandoObjects,但我不知道该系统是否包括开箱即用的数据库序列化/反序列化。

于 2012-04-14T06:18:32.583 回答
1

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

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

于 2012-04-14T06:15:03.117 回答