【发布时间】:2014-12-11 12:35:29
【问题描述】:
我正在运行一些在一大堆实体上运行的更正代码,随着它的进展速度降低,这是因为上下文中跟踪的实体数量随着每次迭代而增加,这可能需要很长时间,所以我正在保存更改在每次迭代结束时。每次迭代都是独立的,不会更改先前加载的实体。
我知道我可以关闭更改跟踪,但我不想这样做,因为它不是批量插入代码,而是加载实体并计算一些东西,如果数字不正确,请设置新数字并更新/删除/创建一些额外的实体。我知道我可以为每次迭代创建一个新的 DbContext 并且可能会比在同一实例中执行所有操作更快,但我认为可能有更好的方法。
所以问题是;有没有办法清除之前在 db 上下文中加载的实体?
【问题讨论】:
-
您只需致电
context.Entry(entity).State = EntityState.Detached,它将停止跟踪该特定实体。 -
为什么不直接实例化一个新的上下文呢?除非您需要非常优化的代码,否则实际上并没有太大的开销。
-
实体框架仅针对更改的实体访问数据库服务器,您对此没有性能问题。但您可以创建一个仅包含您使用的表的新上下文,以使其更快。
-
@IsThatSo 检测变化需要时间,我不担心 DbPerformance。
-
您是否实际调试并跟踪过性能瓶颈,或者只是假设这一点?
标签: c# entity-framework