问题描述
|
桌子:
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触发器来解决此问题,该触发器将删除相关记录(如果存在)代替一个级联路径。