我需要使用 Entity Framework Core 从数据库中删除多行。
此代码不起作用:
foreach (var item in items)
{
myCollection.Remove(item);
}
因为我在第一个对象之后收到错误“InvalidOperationException:集合已修改;枚举操作可能无法执行”。换句话说,.Remove仅删除一个对象。
Entity Framework Core 没有.删除范围,所以我不知道如何执行此操作。
为了保持与各种数据库提供程序的最大兼容性,我宁愿不调用 context.Database.ExecuteSqlCommand("delete fromphysical_table where...")。有合适的解决方案吗?谢谢!
因为我在第一个对象之后收到错误“InvalidOperationException:集合已修改;枚举操作可能无法执行”。换句话说,.Remove 仅删除一个对象。
这与 EF Core 无关,而且,是的,.Remove()
只删除一个对象。但是,您正在尝试修改正在迭代的集合。那里有办法做到这一点 https://stackoverflow.com/questions/17767161/possible-to-modify-a-list-while-iterating-through-it,但这不是一条好路。
Entity Framework Core 没有 .RemoveRange,所以我不知道如何执行此操作。
肯定至少有几种简单的方法可以在 EF Core 中删除多条记录。而且,EF Core 确实有一个RemoveRange()
方法 - 这是一个方法DbSet<TEntity>
, see 在 API 文档中 https://learn.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.dbset-1(如上面的评论所述)。
有几个选择:
-
If myCollection
属于一个类型DbSet<TEntity>
,像这样的简单调用就可以解决问题:
_dbContext.MyEntities.RemoveRange(myCollection);
_dbContext.SaveChanges();
-
If myCollection
实际上是您查询的实体的导航属性,您可以调用.Clear()
在集合上而不是迭代和调用.Remove()
.
var myParentEntity = _dbContext.MyParentEntities
.Include(x => x.MyChildrenEntities)
.Single(x => x.Id == id);
myParentEntity.MyChildrenEntities.Clear();
_dbContext.SaveChanges();
正如上面评论的那样,您的问题缺少很多上下文 - 应该发布更完整的代码。我只是在黑暗中尝试了一些方法来帮助您启动并运行 EF Core!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)