.net core 允许用户创建具有自定义属性的新数据类型

.net core 允许用户创建具有自定义属性的新数据类型,.net-core,entity-framework-core,software-design,.net Core,Entity Framework Core,Software Design,我正在从事一个web项目,用户应该能够创建自定义类型的商品,其中包含任意数量的不同类型的属性(数字、文本等)。例如:一个盒子,有名称、价格和物理尺寸;一个瓶子,有名称、价格和体积 在代码和数据库中表示这一点的最佳方式是什么? 我的第一个想法是为一件商品创建一个基本模板,并将所有自定义数据作为字符串化JSON转储到一个字段中。缺点是这些数据不能用于IQueryable搜索、筛选和排序 我还可以考虑创建一个单独的表,在其中存储所有商品的所有自定义字段,并通过关系引用它们。但是,这不会导致缩放问题,因

我正在从事一个web项目,用户应该能够创建自定义类型的商品,其中包含任意数量的不同类型的属性(数字、文本等)。例如:一个盒子,有名称、价格和物理尺寸;一个瓶子,有名称、价格和体积

在代码和数据库中表示这一点的最佳方式是什么? 我的第一个想法是为一件商品创建一个基本模板,并将所有自定义数据作为字符串化JSON转储到一个字段中。缺点是这些数据不能用于IQueryable搜索、筛选和排序

我还可以考虑创建一个单独的表,在其中存储所有商品的所有自定义字段,并通过关系引用它们。但是,这不会导致缩放问题,因为我将在一个表中存储所有自定义属性

这是最好的方法吗?当然,在.NETCore中无法动态创建新的类和数据库表,但是还有什么其他选项呢


谢谢您的时间,

我在当前的辅助项目中正在做这件事,过去也做过。基本上,您将拥有一个base
Product
表(或您想命名的任何名称)。然后还有一些表,如
ProductAttributeType
ProductAttribute

基本
Product
表将包含所有产品的通用属性,例如
Name
Price

ProductAttributeType

ProductAttributeTypeCode VARCHAR(10)
AttributeTypeName VARCHAR(50)
其中,
ProductAttributeTypeCode
包含属性类型的简短代码(例如“BOOL”),而
AttributeTypeName
是一个友好的名称(例如“Boolean”或“Yes/No”)

ProductAttribute

ProductId INT——产品表的外键
ProductAttributeType代码VARCHAR(10)——ProductAttributeType表的外键
AttributeName VARCHAR(100)——产品属性的名称(例如“卷”)
AttributeValue VARCHAR(MAX)——包含产品属性的实际值
Product
ProductAttribute
具有一对多关系


这是我在过去以及在当前项目中采用的方法,并且效果非常好。这似乎是解决这类问题的一种非常常见的方法。我能想到的唯一“缺点”是,您需要确保
ProductAttribute.AttributeValue
列中的值与
ProductAttributeType(code)
的适当类型匹配。如果你的代码设计得当,并且经过深思熟虑,我认为这真的没有那么糟糕。

我会比较现有的电子商务解决方案,并选择最方便或最优雅的解决方案(以避免发明轮子)。感谢你的回复,这或多或少也是我的想法,但类型的单独表格无疑是一种改进。我剩下的唯一问题是,如果ProductAttribute.AttributeValue属性实际存储为VARCHAR,它如何匹配适当的类型?您的意思是应该在代码中对其进行适当的检查和转换吗?@Valhaal是的,您需要在代码中确保适当的值存储在
ProductAttribute.AttributeValue
中。从表中检索数据时,您可以根据需要转换为基元类型(例如,
bool
int
,等等)。收到了,谢谢您的帮助。将问题标记为已回答。