表格:
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,但这意味着我必须手动对系统中的每个连接表执行删除,这是不切实际的。
- 我可以从商店->类别或商店->产品中删除级联删除。但那时我可能会有很多孤立的记录。
你们如何处理这个问题?
THANKS
这不是实体框架的问题,而是SQL Server的问题。我不认为异常实际上意味着循环级联删除。更可能意味着多个级联删除路径,因为连接表记录可以从类别和产品端删除,因为从商店级联。 SQL Server 不允许这样做,因为它需要一些更复杂(且缓慢)的算法来正确计算级联时哪些记录以及何时必须删除。
简而言之,您必须打破这一点,这实际上意味着您必须在删除商店之前手动删除所有相关记录(类别或产品)。这将需要存储过程(或直接 SQL DELETE 命令),否则您必须先加载所有它们,然后将它们一一删除。
Edit:
正如您在评论中指出的,这也可以通过添加 BEFORE DELETE 触发器来解决,该触发器将删除相关记录(如果存在作为一个级联路径的替换)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)