我有一个类似于Customer对象的东西,最多50000个订单ICollection<Orders>.假设Custome在本地缓存中,订单不在.如何删除Cutomer及其所有相关订单,而无需将所有客户订单加载到缓存中并将其标记为setDeleted()?这里的最佳做法是什么?我认为扩展public SaveResult SaveChanges(JObject saveBundle)方法是最好的方法.客户端的任何其他可能性如旗帜delete_all_navigation_too()?
谢谢
我必须假设您没有并且不希望在数据库上进行级联删除.就个人而言,我对一般的删除感到"害怕"并试图避免它们.我更喜欢软删除(将记录标记为非活动状态).但不是每个人都同意或可以效仿
我会考虑添加一个Web API方法(比如说"DeleteCustomerAndOrders")来执行它.您可以从客户端调用任何API方法,而不仅仅是Breeze方法.
在推荐这个时,我假设你的应用程序中这种事情相对罕见.您不需要通用删除器,带有父对象ID数组的删除器,删除某些子对象而不删除其他子对象的删除器,......等等.
按照此路径,您将把问题从客户端移动到服务器.这很好:您不必在客户端上加载订单.现在你必须在服务器上摆脱它们.如果您正在使用实体框架,那么在不加载订单的情况下删除订单将面临同样的挑战.查看Alex James的解决方案:LINQ to Entities中的批量删除.
我能想到的最简单的方法是在数据库上创建一个级联删除约束,这样当客户被删除时,它的所有订单也会被删除.然后只需删除客户端上的客户并调用"SaveChanges".此外,由于Breeze尚不支持客户端"级联"删除(我们正在考虑这个),您需要迭代已加载的任何客户端订单并"分离"它们.
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |