支持用户定义的数据库字段的动态类

本文关键字:动态 字段 数据库 定义 支持 用户 | 更新日期: 2023-09-27 18:00:30

我目前正在C#中开发一个WCF服务,作为现有内部应用程序的基本API。我正在开发的API特别关注于从数据库中添加和删除记录。

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

这意味着一个部门的CUSTOMER表可能如下所示:

Id | FirstName | LastName | City | State | FavColor

而另一个部门的客户表是这样的:

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

在给定上述结构的情况下,我将如何设计一个类来支持用户定义(Fav)字段?

我考虑使用Dictionary来处理用户定义的字段:

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; }
}

是否有更好的(即更成熟的/最佳实践)来处理这一要求?

支持用户定义的数据库字段的动态类

如果用户定义的字段是有界的,那么您很可能会使用类型描述符作为字段进行继承。我会为此找一篇马丁·福勒的文章。然而,对于使用垂直表(称为实体属性值)的可扩展性,我过去也做过类似的事情。它运行得很好。

编辑:我突然想到,您还可以序列化实例,并将其作为blob/text添加到持久性介质中。这样,您就可以对模式相当松懈。我认为像Mongo这样的文档DB适合这种类型的东西,或者MSSQL中的BLOB字段