Gab*_*iel 5 c# asp.net entity-framework
我在修改和同时添加子行时遇到了一些麻烦.I'm使用该技术从答案: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();
}
Run Code Online (Sandbox Code Playgroud)
我总是至少有一行要更新.当我有1行添加时,它工作正常,问题是当我尝试同时添加多行时,显示众所周知的错误:
ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象.
感觉就像我在这里遗漏了一些东西......
这里的问题是因为两个或多个子存根具有相同的键:0。一旦您尝试附加第一个对象,就会引发错误。
该方法必须使用某种 DTO 重新设计(我认为将 ViewModel 对象传递到域模型层是不正确的,这就是我使用存根的原因)。或者直接从控制器调用函数来添加/修改。
编辑:
这是代码:
public void EditReport(Inspection obj)
{
var inspection = new tbl_inspection
{
id_inspection = obj.ID,
code = obj.Code
};
foreach (var roll in obj.Rolls)
{
var rollStub = new tbl_inspection_roll
{
id_inspection_roll = roll.ID,
id_inspection = obj.ID,
description = roll.Description
};
container.tbl_inspection_roll.Attach(roll);
container.ObjectStateManager.ChangeObjectState(roll, (roll.id_inspection_roll == 0) ? EntityState.Added : EntityState.Modified);
}
container.tbl_inspection.Attach(inspection);
container.ObjectStateManager.ChangeObjectState(inspection, EntityState.Modified);
container.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
欢迎任何更好的解决方案...
| 归档时间: |
|
| 查看次数: |
3389 次 |
| 最近记录: |