StudentとTeacher私は関係がありmany-to-manyます。
データベースに存在してStudentいて、 new を追加したい場合はTeacher、以下のコードを試します。
しかし、インライン:
addedTeachers.ForEach(a => dbStudent.Teacher.Add(a));エラーが発生します
" an object with the same key already exists in the objectstatemanager. the objectstatemanager cannot track multiple objects with the same key"。
どうしたの?
void Update(Student s)
{
using(var context = new MyEntities(connectionString))
{
context.ContextOptions.LazyLoadingEnabled = false;
var dbStudent = context.Student.Include("Teacher").Where(a => a.Id == s.Id).SingleOrDefault();
var dbTeachers = dbStudent.Teacher.ToList();
var newTeachers = s.Teacher.ToList();
var addedTeachers = newTeachers.Except(dbTeachers).ToList();
var deletedTeachers = dbTeachers.Except(newTeachers).ToList();
addedTeachers.ForEach(a => dbStudent.Teacher.Add(a));
deletedTeachers.ForEach(a => dbStudent.Teacher.Remove(a));
context.SaveChanges();
}
}
編集
他に奇妙なこと:
この行の直前の例外dbStudent.Teacher.Countは0ですが、例外の後は1です。もちろんaddedTeachers.Count1でもありますが、デバッガーは次の行に到達しません。