为什么EF7/Core插入重复记录?

本文关键字:记录 插入 EF7 Core 为什么 | 更新日期: 2023-09-27 18:15:38

在我的域模型中,我有

class School
{
    public ICollection<Student> Students { get; set; }
}
class Student
{
    public ICollection<Course> Courses { get; set; }
}
class Teacher
{
    public ICollection<Course> Courses { get; set; }
}
class Course
{
    public Student Student { get; set; }
    public Teacher Teacher { get; set; }
}

假设我的数据库中已经有一个Student和一个Teacher

学号= {C26A6D90-6D36-4CE9-9FF0-5C5BAB6994CC}

教师ID = {26ECCCC6-4A24-4FB2-A406-5021B693EE5E}

然后我想创建一个新的课程

Course c = new Course(student, teacher);
repo.Add(c);
repo.Save();
  1. 我得到一个错误告诉我,我不能用相同的ID重新创建一个学校
  2. 我得到一个错误告诉我,我不能重新创建一个学生与相同的ID

基本上,我从数据库(Student &Teacher),然后尝试用它们创建一个新的关系实体(Course)

{System.Data.SqlClient。SqlException:违反主键约束"PK_Schools"。无法在对象中插入重复键"dbo.Schools"。重复键值为(78434 ef7 - 20 - db - 42 - c8 - 448 e - 08 - d401d04461)。声明是终止。

这似乎是一个EF7问题…是不是还不够成熟——因为感觉上还不成熟!

为什么EF7/Core插入重复记录?

非常感谢CodeNotFound,他们值得一个奖杯…

确保使用相同的DbContext

所以我在我的服务配置中将AddTransient<,>更改为AddSingleton<,>,嘿-presto!它的工作原理!

还要感谢D Stanley提供的这个有用的代码片段:

为了对那些不使用DI的人公平起见,另一种选择是附加学生和老师在保存上下文之前反对上下文课程。Attach告诉EF对象已经存在于数据库中并且不应该再添加。

请,如果你发现这一点,请为那些走在你前面的人想想!