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

时间:2016-10-31 21:47:48

标签: c# entity-framework entity-framework-core

在我的域名模型中我有

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; }
}

假设我的数据库中已有学生和教师

  

学生证= {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的学生
  3. 基本上,我从数据库中获取记录(Student&amp; Teacher),然后尝试使用它们来创建新的关系实体(Course

      

    {System.Data.SqlClient.SqlException:违反PRIMARY KEY   约束&#39; PK_Schools&#39;。无法在对象中插入重复键   &#39; dbo.Schools&#39 ;.重复的键值是   (78434ef7-20db-42c8-448e-08d401d04461)。声明一直如此   终止。

    这似乎是一个EF7问题......它还不够成熟 - 因为它感觉不像!

1 个答案:

答案 0 :(得分:3)

非常感谢CodeNotFound值得获得奖杯......

  

确保您使用相同的DbContext

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

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

  

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

如果你发现了这个,请不要为那些在你面前的人做好准备!