【发布时间】:2022-01-21 12:21:44
【问题描述】:
我需要存储排序的我的实体的元素列表。但是因为它是多对多的关系,而不是一对多的关系,所以我不能只为我的子实体添加排序索引。以这些实体为例:
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<Tuple<int,Dish>> 之类的东西来存储每道菜的索引,但我不知道如何设置它,因为我对 Entity Framework Core 没有太多经验。
对于多对多关系,我找不到太多关于这种问题的问题。我能找到的只是一对多(比如将 index 属性添加到子实体)或返回按某些属性排序的列表(比如get => SomeList.Sort(...))。
我现在能想到的唯一方法是将索引/id 对列表存储在未映射的属性中,并将其存储为字符串以在从数据库存储/检索它时保持顺序。但这看起来确实很乏味,尤其是在尝试使这些与用户编辑的实际列表保持同步时。手动实现多对多关系的 PersonDish 元素而不是使用自动生成的元素似乎也不是很简单(同样,对 ef 没有太多经验)。并且必须对需要排序的每个列表属性执行这两种方法,这使得这不是很可扩展。
关于如何解决这个问题的任何提示或建议?
【问题讨论】:
-
不太清楚你的最终目标是什么 - 也许添加一些样本输入/输出。告诉我更多关于你想要实现的目标。
标签: c# entity-framework collections entity-framework-core