在数据库中添加产品属性的最佳方法(使用EntityFramework,c#)

在数据库中添加产品属性的最佳方法(使用EntityFramework,c#),c#,database,entity-framework,properties,C#,Database,Entity Framework,Properties,对于exmaple,有一种桌上饮料。一种饮料具有不同的属性,其值(蛋白质:6g,糖:5g…) 不同饮料的性质可能不同 在数据库中实现此示例的最佳方法是什么 一个实施示例: public class Drink : BaseEntity { public string Name { get; set; } public virtual ICollection<DrinkProperty> DrinkProperties{ get; set; }

对于exmaple,有一种桌上饮料。一种饮料具有不同的属性,其值(蛋白质:6g,糖:5g…)

不同饮料的性质可能不同

在数据库中实现此示例的最佳方法是什么

一个实施示例:

public class Drink : BaseEntity
    {
        public string Name { get; set; }

        public virtual ICollection<DrinkProperty> DrinkProperties{ get; set; }
    }



public class DrinkProperty : BaseEntity
    {
        public virtual Drink Drink { get; set; }

        public virtual Property Property { get; set; }

        public string Value { get; set; }
    }

public class Property : BaseEntity
    {
        public string Name { get; set; }

        public virtual Measure Measure { get; set; }

        public virtual ICollection<DrinkProperty> DrinkProperties { get; set; }
}
公共类饮料:BaseEntity
{
公共字符串名称{get;set;}
公共虚拟ICollection DrinkProperties{get;set;}
}
公共类DrinkProperty:BaseEntity
{
公共虚拟饮料{get;set;}
公共虚拟财产属性{get;set;}
公共字符串值{get;set;}
}
公共类属性:BaseEntity
{
公共字符串名称{get;set;}
公共虚拟度量值{get;set;}
公共虚拟ICollection DrinkProperties{get;set;}
}

你需要一个多对多的关系,因为一种饮料可以有多个属性,并且每个属性可以被赋予不同的饮料。饮料中属性的数量与列之间存在如此多对多的关系。 您可以做的是在数据库中创建一个存储过程,然后用c#连接到它,并通过给它一些参数来执行它。
因为你可能不知道这种饮料中有多少种产品,你可以把它们作为一个大的nvarchar添加,然后在数据库中使用一些函数进行拆分。或者,您可以添加许多默认为空的参数,然后只取一个不为空的参数。

将您迄今为止尝试过的代码编写出来,以便更好地理解。这称为EAV模型。你应该100%确定你想要这个,因为它不是一个好的模型,尤其是用于查询。将数据存储在非关系数据库(如ravendb、mongodb)中可能是一种可行的选择。