实体框架代码首先是多对多保存问题
本文关键字:保存 问题 框架 代码 实体 | 更新日期: 2023-09-27 18:26:01
好的,我有这个。2类。两者都有彼此项目的列表,如下所示:
public class Bestelling
{
public virtual ICollection<Gerecht> Gerechten { get; set; }
}
public class Gerecht
{
public virtual ICollection<Bestelling> Bestellingen { get; set; }
}
为了简单起见,我去掉了的其余部分
现在,在我的代码中,这些"gerechten"(对不起荷兰语:D)被添加到特定的"bestelling"中。但是,具有相同ID的"gerechten"在列表中出现两次(或多次)不会被保存,只有一次。
在Code First中的多对多关系中,两个单独的对象之间将使用复合键。因此,在中间表中(不一定显示给您,因为您将使用对象模型来访问您的信息),您可以根据需要组合任意数量的Gerecht和Bestellingen-,只要这两项的组合是唯一的(想象一个复合键)。如果您试图在Gerecht和Bestellingen之间创建额外的关系,则只有在存在另一个唯一标识符的情况下才能这样做。在这种情况下,您应该创建一个附加对象以及适当的组合键。
示例(抱歉…不熟悉荷兰语,所以我将使用英语示例):
public class Person
{
public int PersonID { get; set; }
public virtual ICollection<PersonCourse> PersonCourses { get; set; }
}
public class Course
{
public int CourseID { get; set; }
public virtual ICollection<PersonCourse> PersonCourses { get; set; }
}
public class PersonCourse
{
[Key, Column(Order = 0)]
public int PersonID { get; set; }
[Key, Column(Order = 1)]
public int CourseID { get; set; }
[Key, Column(Order = 2)]
public int AnotherUniqueParameter { get; set; }
// Navigation Properties
public virtual Person { get; set; }
public virtual Course { get; set; }
}
只要PersonCourse中三列的组合是唯一的,就可以在特定的Person和Course之间添加任意多的关系。当然,只有在这种情况下才需要使用这个中介表。否则,你已经做的是正确的(至少从我能根据你的问题判断)。