我想使用动态属性,如下所示:
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 :(得分: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:动态扩展和缩小对象。
如果这不是您要搜索的内容,请澄清。