【发布时间】:2013-01-08 19:04:46
【问题描述】:
我有一个批处理,我需要在现有实体之间添加新关系,实体有大数据,我无法获取实体并添加它们,我试过这个:
for .........
Class Class = new Class() { ClassID = myClassId };
context.AddToClasses(Class);
Student std = new Student() { Id = myStdId };
context.AddToStudents(std);
context.ObjectStateManager.ChangeObjectState(Class, System.Data.EntityState.Unchanged);
context.ObjectStateManager.ChangeObjectState(std, System.Data.EntityState.Unchanged);
Class.ClassStudents.Add(std);
.............
第一次调用会成功,但第二次调用会给我这个异常:
AcceptChanges 无法继续,因为对象的键值冲突 与 ObjectStateManager 中的另一个对象。确保密钥 在调用 AcceptChanges 之前值是唯一的。
试过了:
for .........
Class Class = new Class() { ClassID = myClassId };
context.Attach(Class);
Student std = new Student() { Id = myStdId };
context.Attach(std);
context.ObjectStateManager.ChangeObjectState(Class, System.Data.EntityState.Unchanged);
context.ObjectStateManager.ChangeObjectState(std, System.Data.EntityState.Unchanged);
Class.ClassStudents.Add(std);
.............
例外:
EntityKey 值为空的对象不能附加到对象上 上下文。
我该怎么做?
【问题讨论】:
-
Class.ClassID和Student.Id是主键属性吗?您究竟在哪一行得到第二个异常?
标签: c# .net sql-server visual-studio entity-framework