[英]Error : An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key
[英]New object, but error: an object with the same key already exists in the objectstatemanager. the objectstatemanager cannot track multiple (…)
我與Student
和Teacher
之間的關系是many-to-many
。
當我的Student
存在於數據庫中,並且想要添加新的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,但調試器不會到達下一行。
問題是s
和dbStudent
具有相同的主鍵。 s.Teacher
集合中的Teacher
實例s.Teacher
s
實例。 然后,當您調用addedTeachers.ForEach(a => dbStudent.Teacher.Add(a));
,EF將識別鏈接到教師實例的所有對象,並嘗試添加它們。
嘗試
addedTeachers.ForEach(a => { a.Students.Remove(s);
a.Students.Add(dbStudent);
dbStudent.Teacher.Add(a);});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.