EFCore状态同步AutoDetectChangesEnabled

当批量添加修改数据时,EF同步到上下文这个阶段比较耗时。

出现这个问题的原因是:每次调用Add、Update之前,EF都会调用DetectChanges。微软官方给出的介绍是:

获取或设置一个值,该值指示是否通过 DbContext 和相关类的方法自动调用 DetectChanges() 方法。 默认值为 true。

 

当查询数据时EF上下文便捕获了数据的快照,当调用DetectChanges方法时,会扫描上下中所有实体并将当前值和快照中的值进行比较,然后作出相关的行为。但是基于上述应意识到它的缺点,实体对象的改变与EF的ObjectStateManager之间是无法进行同步的。(所以这也就解释了在EF中,将AutoDetectChangesEnabled默认启动的原因。)

 

解决速度慢的方法是:

Context.AutoDetectChangesEnabled = false;
XXXX
XXXX
Context.ChangeTracker. DetectChanges();
Context.SaveChanges();

EFCore状态同步AutoDetectChangesEnabled_第1张图片

 

你可能感兴趣的:(asp.net,Core,.net)