【发布时间】:2012-09-09 09:55:12
【问题描述】:
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,但调试器没有到达下一行。
【问题讨论】:
标签: c# entity-framework linq-to-entities many-to-many objectcontext