级联删除实体框架中的多对多关系

本文关键字:关系 删除 实体 框架 级联 | 更新日期: 2023-09-27 18:16:33

我的数据库中有三个表:

Articles: ArticleID (PK) 
Tags: TagiID (PK)
ArticleTagMapping: ArticleID(FK,PK), TagID(FK,PK)

artiletagmapping有一个复合主键。这在我的实体模型中产生了预期的多对多关系。我已经将两个外键关系设置为在数据库中删除时级联。

我试图通过c#代码删除文章。

var ArticleToDelete = context.Articles.SingleOrDefault(x => x.ArticleID == ArticleID);
context.Articles.DeleteObject(ArticleToDelete);
context.SaveChanges();

我想在不影响Tags条目的情况下删除该文章的所有artiletagmapping条目。我不想删除标签表中的任何条目,只删除映射表中的条目。

级联删除实体框架中的多对多关系

您还没有显示错误。但我怀疑你的关系有问题,不能删除实体。

在SQL Server Management studio中,右键单击ArticleTagMapping表-> Design ->右键单击-> Relationships...
现在选择Articles表和ArticleTagMapping表之间的关系。展开INSERT And UPDATE Specification并将两个规则更改为Cascade。这样,无论何时删除文章,ArticleTagMapping表中的所有相关关系都会自动删除:

var article = context.Articles.SingleOrDefault(a => a.ID == articleID);
context.DeleteObject(article);

只是为了更新有关EF6的答案:

如果设置了外键,引用完整性应该在删除父实体时通过DBMS本身自动执行。

如果你先使用代码,据我在MVA教程中学到的,ON DELETE CASCADE是EF6设置的默认行为。如果先运行DB,你应该修改你的子表…

链接:https://mva.microsoft.com/en-US/training-courses/implementing-entity-framework-with-mvc-8931?l=pjxcgEC3_7104984382在视频中,在20:00向上提到,在幻灯片演示中,在第14页上说。

欢呼