簡體   English   中英

為什么RemoveRange不清除DbSet?

[英]Why is RemoveRange not clearing DbSet?

我有以下擴展方法可以清除DbSet<T>

public static void Clear<T>(this DbSet<T> dbSet)
{
    dbSet.RemoveRange(dbSet);
}

用法如下所示:

databaseContext.Users.Clear();
databaseContext.SaveChanges();

現在的問題是:為什么代碼不起作用,為什么表Users不為空?

編輯

正確的答案是,由於相互之間存在實體關系, SaveChanges會引發異常,因此某些實體不會被刪除。 我沒有注意到該異常,因為它是對[集成] MSTest套件的清理,所有測試都通過了。 但盡管如此,我原來的執行確實包含另一個錯誤,所以我打標,其中一個答復指出來作為響應。

這是由於延遲執行而發生的。 嘗試:

 dbSet.RemoveRange(dbSet.ToList());

在您正在執行RemoveRange的上下文中,沒有從數據庫檢索到的任何行。 通過在RemoveRange dbSet.RemoveRange(dbSet.ToList())之前添加ToList( dbSet.RemoveRange(dbSet.ToList()) ,效果會更好。 請記住,RemoveRange確實會一一刪除。

..我們要表現的地方。 如果您要清除大量性能良好的數據:

  • 使用SqlCommand截斷表(整個表)或
  • 使用外部庫中的批量操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM