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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...