多对多关系中的多个级联删除路径 (EF 4.1)

2024-02-08

表格:

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

问题:以上导致“多个”级联删除路径异常。

潜在的修复:

  1. 删除ManyToManyConvention,但这意味着我必须手动对系统中的每个连接表执行删除,这是不切实际的。
  2. 我可以从商店->类别或商店->产品中删除级联删除。但那时我可能会有很多孤立的记录。

你们如何处理这个问题?

THANKS


这不是实体框架的问题,而是SQL Server的问题。我不认为异常实际上意味着循环级联删除。更可能意味着多个级联删除路径,因为连接表记录可以从类别和产品端删除,因为从商店级联。 SQL Server 不允许这样做,因为它需要一些更复杂(且缓慢)的算法来正确计算级联时哪些记录以及何时必须删除。

简而言之,您必须打破这一点,这实际上意味着您必须在删除商店之前手动删除所有相关记录(类别或产品)。这将需要存储过程(或直接 SQL DELETE 命令),否则您必须先加载所有它们,然后将它们一一删除。

Edit:

正如您在评论中指出的,这也可以通过添加 BEFORE DELETE 触发器来解决,该触发器将删除相关记录(如果存在作为一个级联路径的替换)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多对多关系中的多个级联删除路径 (EF 4.1) 的相关文章

随机推荐