级联删除实体框架中的多对多关系
本文关键字:关系 删除 实体 框架 级联 | 更新日期: 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页上说。
欢呼