DbContext.Configuration.AutoDetectChangesEnabled始终为True,在SaveChanges()之前启用

时间:2014-09-19 13:26:57

标签: performance ef-code-first

我正在努力提高我的EF操作性能,我找到了一些关于DbContext.Configuration.AutoDetectChangesEnabled属性的建议 a)在某些情况下关闭AutoDetectChangesEnabled - 这很清楚 - 我用它来导入函数 b)但后来我注意到这种方法只在调用SaveChanges()之前启用了这个属性:

DbContext db = new DbContext();
db.Configuration.AutoDetectChangesEnabled = false;

//...some changes to POCO properties

db.Configuration.AutoDetectChangesEnabled = true;
db.SaveChanges();

所有更改似乎都正确保存到数据库中,与AutoDetectChangesEnabled属性保持不变的方法相比,它的工作速度明显更快。

问题

所以我想知道是否有理由让AutoDetectChangesEnabled保持原样?如果我默认禁用此属性然后每次在调用DbContext.SaveChanges之前重新启用,可能会有什么风险?

相关文章

这篇帖子暗示可能有理由离开AutoDetectChangesEnabled == true,但没有明确的证据说何时以及为什么要这样做(好吧,它说 - 这样做,如果实体是 EDITED )。有没有人发现/反对这个论点?

EF Code First: is good to call DetectChanges just before SaveChanges?

1 个答案:

答案 0 :(得分:1)

如果您查看文档Entity Framework Automatic Detect Changes,请说:

  

当使用大多数POCO实体时,确定实体的方式   已更改(因此需要将更新发送到数据库)   由Detect Changes算法处理。检测更改的工作原理   检测当前属性值之间的差异   存储在快照中的实体和原始属性值   当实体被查询或附加时。

所以我认为这支持了您发现如果实体已编辑,并且AutoDetectChangesEnabled = true,则会跟踪此更改的链接。

我一直在为插入禁用AutoDetectChangesEnabled,性能有了很大提升。