我有以下扩展方法来清除DbSet<T>
:
public static void Clear<T>(this DbSet<T> dbSet)
{
dbSet.RemoveRange(dbSet);
}
用法如下:
databaseContext.Users.Clear();
databaseContext.SaveChanges();
现在的问题是:为什么代码不能正常工作,为什么表用户不空?
正确的答案是SaveChanges
因为相互的实体关系而引发异常,因此不会删除某些实体。我没有注意到异常,因为它作为一个[集成] MSTest套件的清理运行,所有测试都通过了。但是,我的原始实现仍然包含另一个错误,因此我将其中一个响应标记为 响应。
答案 0 :(得分:1)
这是因为deferred execution而发生的。 尝试:
dbSet.RemoveRange(dbSet.ToList());
答案 1 :(得分:0)
在执行RemoveRange的上下文中,没有从数据库中检索到任何行。通过在RemoveRange dbSet.RemoveRange(dbSet.ToList())
之前添加ToList(),结果更好。请记住,RemoveRange会逐个删除..
..我们来表演的地方。如果您希望以良好的性能清除大量数据: