6

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

谢谢

4

2 回答 2

6

我必须假设您没有也不希望对您的数据库进行级联删除。就个人而言,我总体上对删除“感到恐惧”并尽量避免它们。我更喜欢软删除(将记录标记为非活动)。但并非所有人都同意或可以效仿

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

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

按照这条路径,您将把问题从客户端转移到服务器。这很好:您不必在客户端加载订单。现在你必须在服务器上摆脱它们。如果您使用的是实体框架,您将面临同样的挑战,即删除订单而不加载它们。查看 Alex James 的解决方案:在 LINQ to Entities 中批量删除

于 2012-12-09T17:46:36.347 回答
5

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

于 2012-12-09T17:49:18.710 回答