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

时间:2011-12-01 11:08:32

标签: c# entity-framework many-to-many cascading-deletes

我的数据库中有三个表:

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

ArticleTagMapping具有复合主键。这导致我的实体模型中的多对多关系如预期的那样。我已将两个外键关系设置为在数据库中删除级联。

我试图通过C#代码删除文章。这错误了......

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

我想删除该文章的所有ArticleTagMapping条目,而不会影响Tags条目。 我不想删除Tags表中的任何条目,只删除映射表中的条目。这里需要帮助......

2 个答案:

答案 0 :(得分:2)

您没有向我们展示错误。但是我怀疑你在关系方面存在问题,这会阻止删除实体。

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

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

答案 1 :(得分:0)

只是为了更新有关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页

干杯