【问题标题】:Delete records returned for .ToList删除为 .ToList 返回的记录
【发布时间】:2012-01-27 10:06:44
【问题描述】:

我有一个带有 COMMENTS 表和 RESPONSES 表的 BLOG 表。 示例:

  • 博客一

    1. 评论=A
      • 响应 1
      • 响应 2
    2. 评论-B
      • 响应 1
      • 响应 2
      • 响应 3
  • 博客二

    1. 评论-A
      • 响应 1
      • 响应 2
      • 响应 3
    2. 评论-B
      • 响应 1
      • 响应 2

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

我认为解决方案是删除从 .ToList() 返回的所有记录。这就是我正在考虑/尝试的。我似乎可以执行“IN”列表类型的命令。

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

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

【问题讨论】:

标签: asp.net linq entity-framework


【解决方案1】:

Entity Framework 不擅长这样的批量操作。有一些方法可以完成您的要求,但它们笨拙且缓慢。

最好的解决方案是在您的外键约束上放置一个ON DELETE CASCADE,将评论链接到博客,并将您的回复链接到评论。这样,您只需在 EF 中删除博客,数据库将很快自动删除所有相关数据。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我发现“.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 是我以前没有使用过的东西,在这种情况下,它可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-18
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多