表:
Shop
Product
Category
关系:
(Shop) 1 <---> n (Categories)
(Shop) 1 <---> n (Products)
(Categories) n <---> n (Products)
CASCADE DELETES:
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
问题: 上面的结果是“多个”级联删除路径异常。
可能的修正:
你们是怎么处理这个问题的?
感谢
答案 0 :(得分:5)
这不是实体框架的问题,而是SQL服务器的问题。我不认为异常实际上意味着循环级联删除。它更可能意味着多个级联删除路径,因为连接表记录可以从类别和产品方面删除,因为从商店级联。 SQL服务器不允许这样做,因为它需要一些更复杂(和慢速)的算法来正确计算哪些记录以及何时必须在级联时删除。
您必须打破这一点,这实际上意味着您必须在删除商店之前手动删除所有相关记录(类别或产品)。这将需要存储过程(或直接SQL DELETE命令),否则您将必须首先加载所有这些并逐个删除它们。
编辑:
正如您在评论中指出的那样,这也可以通过添加BEFORE DELETE触发器来解决,如果存在替换一个级联路径,则会删除相关记录。