[英]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確實會一一刪除。
..我們要表現的地方。 如果您要清除大量性能良好的數據:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.