我有一个嵌套的 EF 对象挂在其父对象上。它有 1:n 的关系
[父]-[n..child]
嵌套对象子对象是动态的,将通过 GUI 更新。
我在数据库上更新它时遇到问题。
错误消息: ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
这是第二版的问题。我对决定 preExist 的 if 块进行了更正
在此先感谢您的帮助
坐鸭
主要更新
void MainUpdate
{
var context = new FamilyEntities();
parent = getParentFromGui();
parent.UpdateRelatedEntities(context);
context.dispose();
}
对象父对象已在 Gui 中更新
parent getParentFromGui()
{
parent myParent = parentBindingSource.DataSource as parent;
foreach(child c in childrenBindingSource)
{
myParent.children.Add(c);
}
return myParent
}
修改更新相关实体
public static void UpdateRelatedEntities(this parent entity, FamilyEntities context)
{
if (entity == null) return;
var res = context.parent.Where(x => x.uid_parent == entity.uid_parent);
var rec = res.FirstOrDefault();
context.parent.Attach(rec);
context.parent.ApplyCurrentValues(entity);
foreach (var c in entity.children)
{
bool preExist = context.children.FirstOrDefault(x => x.child_uid == c.child_uid);
if (preExist != null)
{
context.children.Attach(obj);
context.children.ApplyCurrentValues(c);
}
else
{
// This Part throw ERROR
context.children.AddObject(c);
}
}
context.SaveChanges();
}
我做错了什么?
发送很多!