【发布时间】:2019-09-13 10:04:12
【问题描述】:
我有一个对象列表,我需要将这些对象附加到 Context 以跟踪更改并随后保存它们,但迭代项目的 foreach 仅在第一次执行,之后方法结束。 我确定这些项目已经存在于数据库中。
我已经尝试调用.Attach() 方法并将Entry 状态设置为Unchanged。
protected override Task SetViewModelPropertiesAsync()
{
SelectedItems.ForEach(l =>
{
//Context.Pap_Pedido_ODP.Attach(l);
Context.Entry(l).State = System.Data.Entity.EntityState.Unchanged;
// After the first iteration the method ends
});
return base.SetViewModelPropertiesAsync();
}
我希望将所有项目都添加到上下文中,但在 foreach 循环的第一次迭代之后会中断该方法并继续下一个方法,甚至没有给出异常。
编辑: 当我执行 Attach 或 EntityState 时,会跳过 foreach 之后的更多代码。 如果我评论两个代码都正确执行
【问题讨论】:
-
也许收藏中只有一项。
-
该项目很可能有一个主键,所以它只会被添加一次。
-
@Bigabdoul 不,我知道至少有 2 项,并且我已经调试检查过
-
@jdweng 每个项目都有自己的主键,但可怕的是 整个方法 中断。 foreach 之后还有更多代码(我没有包含在问题示例中)并且它被跳过了
-
我见过这样的问题。花时间单步执行代码后,我通常会发现异常。当 C# 发现没有异常处理程序的异常时,它似乎会向上移动执行堆栈并在 Ancestor 方法中找到第一个异常处理程序。异常处理程序可以是祖先中的任何位置。因此,当我在异常之后单步执行代码时,它会转到父方法,然后疯狂地跳转到另一段代码中的异常处理程序。为了解决这个问题,我添加了一个新的异常处理程序。
标签: c# .net wpf entity-framework