【发布时间】:2017-03-08 22:54:22
【问题描述】:
我正在尝试删除对象的层次结构:
客户->订单->订单项->订单项选项
我设置了一个简单的嵌套循环,试图以“正确”的顺序执行操作,因为它们必须在数据库中完成 - 在删除父记录之前先删除子记录。
这是循环:
deleteCustomer(customer: Customer): Promise<void> {
return this.getCustomerOrderHistory(customer.id).then(orders => {
orders.forEach(o => {
o.items.forEach(oi => {
oi.options.forEach(opt => opt.entityAspect.setDeleted());
oi.entityAspect.setDeleted();
});
o.entityAspect.setDeleted();
});
customer.entityAspect.setDeleted();
});
}
问题是当每一层的父对象被setDeleted()时,会在EntityManager缓冲的变化中添加一组标记为“已修改”的重复实体记录。然后,当我调用 saveChanges 时,ASP.NET/EF 后端会引发异常,因为在执行与这些修改记录相对应的 UPDATE 语句时,DELETE 已经发生,因此 UPDATE 失败并出现 FK not found 类型的异常。
那么我在这里错过了什么?
【问题讨论】:
标签: c# entity-framework typescript breeze