提问者:小点点

实体框架核心中无重复项的有序集合


我需要存储一个元素的列表,我的实体是有序的。但因为这是一种多对多关系,而不是一对多关系,所以我不能只向子实体添加排序索引。例如,考虑这些实体:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Dish> FavoriteDishes { get; set; }
}

public class Dish
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Person> People { get; set; }
}

正如你所看到的,这是一个多对多的关系,一个人有一个他们喜欢吃的菜的列表,每道菜都有一个喜欢那道菜的人的列表。

当要考虑最喜爱的菜肴列表时,问题就会出现,例如排名,如前十名。现在需要有一种方法为这些元素创建一个已定义但用户可编辑的顺序。此外,列表不应包含重复项。

由于每道菜都属于多个人,我不能只在这里添加索引属性。我考虑过使用类似于List的东西

我现在能想到的唯一方法是将索引/id对列表存储在未映射属性中,并将其存储为字符串,以便在从数据库存储/检索时保持顺序。但这看起来确实很乏味,尤其是当试图让这些内容与用户编辑的实际列表保持同步时。手动实现多对多关系的PersonDish元素而不是使用自动生成的元素似乎也不太简单(同样,对ef没有太多经验)。对于每个需要排序的列表属性,这两种方法都必须执行,这使得它的可伸缩性不是很强。

关于如何解决这个问题有什么建议吗?


共1个答案

匿名用户

我认为您需要明确定义第三个表并添加一个Rating属性

public class PersonDish
{
    public int PersonId { get; set; }
    public int DishId { get; set; }

    public int Rating {get; set;}

    public  virtual Person Person { get; set; }
    public virtual Dish Dish { get; set; }
}