为什么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();
- 我得到一个错误告诉我,我不能用相同的ID重新创建一个学校
- 我得到一个错误告诉我,我不能重新创建一个学生与相同的ID
基本上,我从数据库(Student
&Teacher
),然后尝试用它们创建一个新的关系实体(Course
)
{System.Data.SqlClient。SqlException:违反主键约束"PK_Schools"。无法在对象中插入重复键"dbo.Schools"。重复键值为(78434 ef7 - 20 - db - 42 - c8 - 448 e - 08 - d401d04461)。声明是终止。
这似乎是一个EF7问题…是不是还不够成熟——因为感觉上还不成熟!
非常感谢CodeNotFound,他们值得一个奖杯…
确保使用相同的DbContext
所以我在我的服务配置中将AddTransient<,>
更改为AddSingleton<,>
,嘿-presto!它的工作原理!
还要感谢D Stanley提供的这个有用的代码片段:
为了对那些不使用DI的人公平起见,另一种选择是附加学生和老师在保存上下文之前反对上下文课程。Attach告诉EF对象已经存在于数据库中并且不应该再添加。
请,如果你发现这一点,请为那些走在你前面的人想想!