删除实体及其导航属性

时间:2012-12-09 17:07:15

标签: breeze

我在ICollection<Orders>中拥有类似于最多50000订单的Customer对象。 假设Custome在本地缓存中,订单不在。如何在不将所有客户订单加载到缓存中并使用setDeleted()标记它们的情况下,如何删除Cutomer及其所有相关订单? 这里的最佳做法是什么?我认为扩展public SaveResult SaveChanges(JObject saveBundle)方法是最好的方法。客户端的任何其他可能性如标志delete_all_navigation_too()

由于

2 个答案:

答案 0 :(得分:6)

我必须假设您没有并且不希望在数据库上进行级联删除。就个人而言,我对一般的删除感到“害怕”并试图避免它们。我更喜欢软删除(将记录标记为非活动状态)。但不是每个人都同意或可以效仿

我会考虑将一个Web API方法(比如说“DeleteCustomerAndOrders”)添加到控制器中。您可以从客户端调用任何API方法,而不仅仅是Breeze方法。

在推荐这个时,我假设你的应用程序中这种事情相对罕见。您不需要通用删除器,带有父对象ID数组的删除器,删除某些子对象而不删除其他子对象的删除器,等等。

按照此路径,您将问题从客户端移至服务器。这很好:您不必在客户端上加载订单。现在你必须在服务器上摆脱它们。如果您正在使用实体框架,那么在不加载订单的情况下删除订单会遇到同样的挑战。查看Alex James的解决方案:Bulk-deleting in LINQ to Entities

答案 1 :(得分:5)

我能想到的最简单的方法是在数据库上创建级联删除约束,这样当客户被删除时,它的所有订单也会被删除。然后只需删除客户端上的客户并调用“SaveChanges”。此外,由于Breeze尚不支持客户端“级联”删除(我们正在考虑这个),您需要迭代已加载的任何客户端订单并“分离”它们。