C# 数据模型支持用户定义的模板,输入字段可以是string、int或date

C# 数据模型支持用户定义的模板,输入字段可以是string、int或date,c#,asp.net-mvc,entity-framework,data-modeling,C#,Asp.net Mvc,Entity Framework,Data Modeling,我在为几个场景建模实体时遇到了麻烦。其中一个是需要刷新的旧式许可证系统,另一个系统是不相关的,但它们的共同点是,用户将定义许多输入字段,这些字段可能采用string、int或date(甚至可能是其他数据类型)。这些字段的数量和排列在编译时未知 我将尝试用一个更具体的例子进一步阐述 许可证系统允许用户定义一组产品,每个产品都有一组功能,并且在生成许可证密钥时,每个功能都定义了一个值。e、 g.许可证密钥中的拼写检查器功能可以打开或关闭。还有一些产品模板,允许用户定义功能的默认值(例如,按照产品SK

我在为几个场景建模实体时遇到了麻烦。其中一个是需要刷新的旧式许可证系统,另一个系统是不相关的,但它们的共同点是,用户将定义许多输入字段,这些字段可能采用string、int或date(甚至可能是其他数据类型)。这些字段的数量和排列在编译时未知

我将尝试用一个更具体的例子进一步阐述

许可证系统允许用户定义一组产品,每个产品都有一组功能,并且在生成许可证密钥时,每个功能都定义了一个值。e、 g.许可证密钥中的拼写检查器功能可以打开或关闭。还有一些产品模板,允许用户定义功能的默认值(例如,按照产品SKU的思路思考,您可以使用支持更多功能的Pro版本,关闭许多功能的Lite版本)

最终目标是真正定义产品及其功能。产品模板定义产品SKU的每个功能的值。当创建新的许可证密钥时,用户选择一个产品模板以从模板中获取功能的默认值,但每个值都可以被覆盖。最终,许可证密钥会告诉软件应该启用哪些功能,并且可能会将一些值传递给软件。产品和产品模板定义存在哪些功能,以及哪些值/数据类型可以输入到许可证中

示例产品模板可能如下所示(假设产品):

许可证示例可能如下所示:

Product: TextEditor
Template name: Text Editor Pro
Feature1-SpellCheck: on
Feature2-Tables: on
Feature3-ExpiryDate: 1/1/2020
Feature4-DefaultFont: Helvetica
我遇到的困难是如何对功能和产品模板进行建模,这样用户就可以创建新产品并添加功能,并且可以灵活地为每个功能定义不同的数据类型。通过定义产品,用户正在创建一个可以启用/禁用或指定某种值的功能列表。我不确定如何对这种数据类型进行最佳建模,因为在向产品添加功能时,用户可能会选择至少3种不同的数据类型(字符串、整数、日期等)

在遗留系统中,这是由实体TemplateAttribute和LicenseAttribute建模的,它们可以采用整数值和字符串值(日期存储为整数)。AttributeValue和AttributeValue。这个遗留系统可以追溯到2000年左右,是用VB表单和SQL构建的。我想弄清楚的是,是否有更好的方法在新技术(如基于实体框架类的模型)中表示这种关系。我想在ASP.NET MVC中使用EF编写此解决方案,用于持久化数据

旧数据模型的图像:

到目前为止,我能看到的两种解决方法是:

  • 逐字复制遗留模型,为每个特性(属性)获取int和string值
  • 每个数据类型都有一个单独的集合,例如,产品将包括featurestring、featureint、featurebool等

这两种解决方案对我来说都不优雅,我想知道是否有人对如何建模有更好的想法。也许有一种更通用的方法,或者类似的模式,我可以从中寻找想法。我看到的大多数数据模型教程都使用非常简单的关系,而在本例中,模型本身就支持对象(产品/功能)的用户定义模型。

如果您希望取悦数据建模评论家,您可以考虑每个数据类型的单独表。

< P>如果您想取悦数据建模评论家,您可以考虑每个数据类型的单独表。

对不起,对于一个长的问题,我发现对这个长的问题表示抱歉,我发现这个挑战很难表达。
Product: TextEditor
Template name: Text Editor Pro
Feature1-SpellCheck: on
Feature2-Tables: on
Feature3-ExpiryDate: 1/1/2020
Feature4-DefaultFont: Helvetica
Note that ProductAttribute.Type has FK relationship to Types.TypeName.
That's where the Attributes and the data Types are linked.