gpt4 book ai didi

c# - 如何清除 Entity Framework 中的跟踪实体

转载 作者:IT王子 更新时间:2023-10-29 03:53:41 25 4
gpt4 key购买 nike

我正在运行一些运行在一大堆实体上的校正代码,随着它的进展速度降低,这是因为上下文中跟踪的实体数量随着每次迭代而增加,这可能需要很长时间,所以我正在保存更改在每次迭代结束时。每次迭代都是独立的,不会更改先前加载的实体。

我知道我可以关闭更改跟踪,但我不想这样做,因为它不是批量插入代码,而是加载实体并计算一些东西,如果数字不正确,请设置新数字并更新/删除/创建一些额外的实体。我知道我可以为每次迭代创建一个新的 DbContext,这可能比在同一实例中执行所有操作运行得更快,但我认为可能有更好的方法。

所以问题是;有没有办法清除之前在数据库上下文中加载的实体?

最佳答案

您可以向 DbContext 添加方法或使用 ChangeTracker 分离所有已添加、已修改和已删除实体的扩展方法:

public void DetachAllEntities()
{
var changedEntriesCopy = this.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added ||
e.State == EntityState.Modified ||
e.State == EntityState.Deleted)
.ToList();

foreach (var entry in changedEntriesCopy)
entry.State = EntityState.Detached;
}

关于c# - 如何清除 Entity Framework 中的跟踪实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27423059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com