删除.ToList返回的记录

时间:2012-01-26 19:07:04

标签: asp.net linq entity-framework

我有一张带有反应表的评论表的博客表。 例如:

  • 博客

    1. COMMENTS = A
      • 回复1
      • 回复2
    2. COMMENT-B
      • 回复1
      • 回复2
      • 回应3
  • BLOG TWO

    1. COMMENTS-A
      • 回复1
      • 回复2
      • 回应3
    2. COMMENT-B
      • 回复1
      • 回复2

如果我们删除'BLOG TWO',我需要删除所有回复以及所有评论和BLOG帖子

我认为解决方法是删除从.ToList()返回的所有记录。这就是我的想法/尝试。我似乎可以做一个'IN'列表类型的命令。

ctx.BlogResponse.Where(b => b.blogCommentID = xxMyListItemxxx** ).ForEach(ctx.BlogResponse.DeleteObject);

如何从.ToList()中删除/包含记录?

3 个答案:

答案 0 :(得分:1)

实体框架不是很擅长这样的批量操作。有办法完成你所要求的,但它们很笨拙而且很慢。

最好的解决方案是在您的外键约束上添加ON DELETE CASCADE,将评论链接到博客,并将您的回复链接到评论。这样,您只需删除EF中的博客,数据库就会非常快速地自动删除所有相关数据。

答案 1 :(得分:0)

您应该阅读此article标题的部分:级联删除关系规则

答案 2 :(得分:0)

我发现'.DeleteObject'删除了返回的LIST中包含的项目。我能够打几个电话,效果很好。

  

ctx.BlogComments.Where(c => c.blogID ==   ID).ToList()的ForEach(ctx.BlodComments.DeleteObject);

     

ctx.BlogResponse.Where(c => c.bCommID ==   CID).ToList()的ForEach(ctx.BlogResponse.DeleteObject);

.ForEach是我以前没用过的东西,在这种情况下,它可以工作。