我需要将多个子对象添加到现有父对象。我正在实例化我的父对象,并在我的UI处理层(我的子对象将被添加到其中)中设置它Key / Id。
Parent parenttoModify = new Parent();
parenttoModify.Parent_Id = 5; //this comes from some Index of a dropdown or a key column of a grid, i Have put a dummy value here for example
parenttoModify.Children.Add(child);
parenttoModify.Children.Add(child2);
DataAccess.ModifyParent(parenttoModify);
在我的数据访问层中,我有一个方法:
public static bool ModifyParent(Parent parent)
{
int recordsAffected=0;
using (TestEntities testContext = new TestEntities())
{
testContext.Parents.Attach(parent);
var parentEntry = testContext.ObjectStateManager.GetObjectStateEntry(parent);
parentEntry.ChangeState(System.Data.EntityState.Modified);
recordsAffected = testContext.SaveChanges();
}
return recordsAffected > 0 ? true : false;
}
调用testContext.Parent.Attach(parent)时出错。它说:
具有相同键的对象已存在。
我不确定为什么会发生这种情况,因为我没有添加父对象,我只是附加它并在其中添加子对象。
知道我哪里错了吗?
答案 0 :(得分:2)
你在哪里添加孩子?我想你没有显示所有代码。当您调用Attach
或AddObject
时,EF始终将目标图中未知(跟踪)的所有实体附加或添加到上下文中。例外情况说,某些实体 - 可能是父实体 - 已经被上下文跟踪。所以你要么:
ModifyParent
中创建一个新实例,因此不应该是这样的情况)ModifyParent
Attach
或AddObject
。所有这些操作都会导致您收到的异常。