多重关系中的多级删除路径EF 4.1

问题描述

| 桌子:
Shop
Product
Category
关系:
      (Shop) 1 <---> n (Categories)
      (Shop) 1 <---> n (Products)
(Categories) n <---> n (Products)
级联删除
      Shop  ---> Categories ... I defined this using fluent API
      Shop  ---> Products   ... I defined this using fluent API
Categories <---> Products   ... EF 4.1 automatically defines cascade for \"Category_Product\" join table
问题: 以上将导致“多个”级联删除路径异常。 潜在的修复: 删除ManyToManyConvention,但这意味着我必须手动对系统中的每个联接表执行删除操作,这是不切实际的。 我可以从Shop-> Category或Shop-> Products中删除级联删除。但是那时我可能会有很多孤立的记录。 你们如何处理这个问题? 谢谢     

解决方法

这不是实体框架的问题,而是SQL Server的问题。我不认为异常实际上意味着循环级联删除。这很可能意味着多个级联删除路径,因为由于车间的级联,可以从类别和产品端删除联接表记录。 SQL Server不允许这样做,因为它需要一些更复杂(且较慢)的算法来正确计算级联时哪些记录以及何时需要删除。 简单地说,您必须打破这一点,这实际上意味着您必须在删除商店之前手动删除所有相关记录(类别或产品)。这将需要存储过程(或直接使用SQL DELETE命令),否则您将必须首先加载所有存储过程,然后将它们一个一个地删除。 编辑: 正如您在评论中指出的那样,也可以通过添加BEFORE DELETE触发器来解决此问题,该触发器将删除相关记录(如果存在)代替一个级联路径。