C# 实体框架分离了多个多对多实体

C# 实体框架分离了多个多对多实体,c#,entity-framework,many-to-many,C#,Entity Framework,Many To Many,通常,一个页面会有一个主实体和子实体。对于这种分离的多对多,我以前有一个解决方案 e、 g 我的问题是视图中有多个类,导致“同一类型的实体已具有相同的主键值” e、 g.循环类列表 foreach(var class in viewModel.Classes) { db.Entry(Class).State = EntityState.Modified; } 如果两个班级都有相同的学生,上述代码将在到达第二个班级时抛出错误。这是因为指定EntityState还将加载它的子实体并创建同一学生

通常,一个页面会有一个主实体和子实体。对于这种分离的多对多,我以前有一个解决方案

e、 g

我的问题是视图中有多个类,导致“同一类型的实体已具有相同的主键值”

e、 g.循环类列表

foreach(var class in viewModel.Classes) {
  db.Entry(Class).State = EntityState.Modified;
}
如果两个班级都有相同的学生,上述代码将在到达第二个班级时抛出错误。这是因为指定EntityState还将加载它的子实体并创建同一学生的两个实例

我试图通过创建一个临时集合来处理这个问题,这样它就只有一个实例

e、 g

var students=newlist();
foreach(viewModel.Classes中的var类){
foreach(课堂上的学生,学生){
Student dbStudent=null;
如果(!student.Any(s=>s.StudentID==student.StudentID)){
dbStudent=db.Student.Find(Student.StudentID);
添加(dbStudent);
db.Entry(dbStudent.State=EntityState.Modified;
} 
否则{
dbStudent=students.Where(s=>s.StudentID==student.StudentID).SingleOrDefault();
}
dbStudent.Classes.Add(class);
}
db.Entry(class).State=EntityState.Modified;
}
上面的代码对于新条目很有效,但是对于现有条目,它会导致“主键错误”,对我来说,它是分离的。当试图删除现有条目时,这也不起作用


有人能帮我吗?谢谢

这可能是一个愚蠢的问题,但为什么要将学生状态更改为修改?我认为这里的问题与其说是您的代码,不如说是数据库结构。。。你们没有带两个外键的链接表吗?我有。但是我让EntityFramework为我做了这件事。我将student设置为modified,因为我在从db/context加载新类后添加了一个新类。如果我想更改reflectdstudent.Add(class),我必须将其设置为modified;您正在将类实体添加到实体类型Student?你觉得怎么样?
foreach(var class in viewModel.Classes) {
  db.Entry(Class).State = EntityState.Modified;
}
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;
}