2012-01-26 141 views
1

我有一個BLOG表與COMMPONSES表的COMMENTS表。 實施例:刪除記錄返回.ToList

  • BLOG ONE

    1. COMMENTS = A
      • 響應1
      • 響應2
    2. COMMENT-B
      • 響應1
      • 響應2
      • 響應3
  • BLOG TWO

    1. COMMENTS-A
      • 響應1
      • 響應2
      • 響應3
    2. COMMENT-B
      • 響應1
      • 響應2

如果我們刪除的博客二'我需要刪除所有響應和所有的意見和博客文章也是如此。

我認爲解決方案是刪除從.ToList()返回的所有記錄。這是我正在思考/嘗試的。我似乎可以做一個'IN'列表類型的命令。

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

如何刪除/包含在.ToList()中的記錄?

+1

我建議將級聯參照完整性約束添加到您的數據庫模式。那麼相關數據將自動刪除。如果您使用sqlserver,請參閱msdn以獲取詳細信息:http://msdn.microsoft.com/zh-cn/library/ms186973.aspx – Jan

回答

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是我以前沒有用過的東西,在這種情況下,它的工作原理。

1

實體框架的規則是不是在這樣的批量操作非常好。有許多方法可以完成你所要求的,但是它們笨重而緩慢。

最好的解決方案就是在你的外鍵約束上加上一個ON DELETE CASCADE,這個約束將評論鏈接到一個博客,並將你的響應鏈接到一個評論。這樣,您只需刪除EF中的博客,數據庫將非常快速地自動刪除所有相關數據。