实体框架分离多个多对多实体

时间:2014-11-27 08:53:58

标签: c# entity-framework many-to-many

通常,页面将具有单个主要实体并具有子实体。我之前有过这种分离的多对多

的解决方案

e.g。

db.Entry(Class).State = EntityState.Modified;
foreach(var student in Class.student) {
  var dbStudent = db.Students.Find(student.StudentID);
  dbStudent.Classes.Add(Class);
}

我的问题是我在视图中有多个Classes并且导致“相同类型的实体已经具有相同的主键值”

e.g。循环类列表

foreach(var class in viewModel.Classes) {
  db.Entry(Class).State = EntityState.Modified;
}

如果两个班级中都有相同的学生,则上面的代码会在到达第二课时抛出错误。这是因为分配EntityState还会加载子实体并创建同一学生的2个实例。

我尝试通过创建临时集合来操纵它,以便它只有一个实例

e.g。

var students = new List<students>();
foreach(var class in viewModel.Classes) {
  foreach(var student in class.Students) {
     Student dbStudent = null;
     if(!students.Any(s => s.StudentID == student.StudentID)) {
      dbStudent = db.Student.Find(student.StudentID);
      students.Add(dbStudent);
      db.Entry(dbStudent).State = EntityState.Modified;
    } 
    else {
      dbStudent = students.Where(s => s.StudentID == student.StudentID).SingleOrDefault();
    }

    dbStudent.Classes.Add(class);
  }
  db.Entry(class).State = EntityState.Modified;
}

上面的代码适用于新条目,但对于现有条目,它会导致“主键错误”,对我来说,它是分离的。尝试删除现有条目时,这也无效。

有人可以帮我吗?感谢

0 个答案:

没有答案