我的数据库中有三个表:
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表中的任何条目,只删除映射表中的条目。这里需要帮助......
答案 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页。
干杯