gpt4 book ai didi

c# - 使用 Entity Framework 同时更新和添加子行

转载 作者:太空狗 更新时间:2023-10-29 23:40:03 25 4
gpt4 key购买 nike

我在同时修改和添加子行时遇到了一些麻烦。我正在使用答案中的技术: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 行时,显示众所周知的错误:

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

感觉好像我在这里遗漏了什么......

最佳答案

我认为您需要将修改与添加分开。在您链接到 Ladislav 的问题中,有以下代码作为示例:

if (myEntity.Id != 0)
{
context.MyEntities.Attach(myEntity);
context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
}
else
{
context.MyEntities.AddObject(myEntity);
}

context.SaveChanges();

我认为具体使用 Attach 而不是使用 AddObject 是导致错误的原因。

编辑:尝试对附加部分执行以下操作:

var r = new tbl_inspection_roll { id_inspection_roll = roll.id_inspection_roll };
container.tbl_inspection_roll.Attach(r);
container.Entry(r).CurrentValues.SetValues(roll);

关于c# - 使用 Entity Framework 同时更新和添加子行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com