【发布时间】:2013-01-03 14:15:39
【问题描述】:
我在同时修改和添加子行时遇到了一些麻烦。我正在使用答案中的技术:stackoverflow.com/questions/5557829/...。
问题出在以下代码中:
public void EditReport(tbl_inspection inspection)
{
foreach (var roll in inspection.tbl_inspection_roll)
{
container.tbl_inspection_roll.Attach(roll);
container.ObjectStateManager.ChangeObjectState(roll, (roll.id_inspection_roll == 0) ? EntityState.Added : EntityState.Modified);
}
container.SaveChanges();
}
我总是至少有 1 行要更新。当我有 1 行要添加时,它工作正常,问题是当我尝试同时添加 1 行以上时,显示众所周知的错误:
ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同的多个对象 键。
感觉好像我在这里错过了什么......
【问题讨论】:
-
1) 检查您的 tbl_inspection 列表以确保没有重复项。 2) 在调试器中,检查 tbl_inspection 列表中的这些记录的状态是什么在您附加它们之前,并查看其中一个是否已被视为附加。 3) 同样在调试器中,检查本地集合中是否也找到任何 tbl_inspection 记录。那件事以前发生在我身上......
-
我检查了你描述的所有项目,看起来很好,虽然当我尝试添加超过 1 行时,id_inspection_roll 都等于零。这意味着他们是平等的?有没有办法区分它们?非常感谢您帮助我。
标签: c# asp.net entity-framework