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.Count
1でもありますが、デバッガーは次の行に到達しません。