2014-04-28 34 views
2

我目前正在C#中开发一个WCF服务,作为现有内部应用程序的基本API。我正在开发的API专注于从数据库添加和删除记录。支持用户定义的数据库字段的动态类

但是,应用程序允许最终用户通过在每个表中添加自定义字段来更改现有的数据库结构。

这意味着,一个部门的客户表可能是这样的:

Id | FirstName | LastName | City | State | FavColor 

而另一个部门的客户表看起来像这样:

Id | FirstName | LastName | City | State | FavFood | FavMovie 

我将如何设计一个类,以支持用户定义(Fav)字段给出了上面的结构?

我认为用字典来处理用户定义的字段:

public class Customer 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public Dictionary<string, string> UserDefinedFields { get; set; } 
} 

有没有更好的(即更成熟/最佳实践),用于处理这一要求?

回答

0

如果用户定义的字段是有界的,那么可以使用type descriminator作为字段来继承。我会为此发掘一篇Martin Fowler的文章。但是,对于使用垂直表的可扩展性(称为实体属性值),我在过去做过类似的事情。它工作得很好。

编辑: 刚刚发生,我还可以序列化实例并将其作为blob /文本添加到持久性介质。这样你可以对模式相当宽松。我认为像Mongo这样的文档数据库对于这种类型的事物或MSSQL中的BLOB字段会很好用