我正在努力提高我的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?
答案 0 :(得分:1)
如果您查看文档Entity Framework Automatic Detect Changes,请说:
当使用大多数POCO实体时,确定实体的方式 已更改(因此需要将更新发送到数据库) 由Detect Changes算法处理。检测更改的工作原理 检测当前属性值之间的差异 存储在快照中的实体和原始属性值 当实体被查询或附加时。
所以我认为这支持了您发现如果实体已编辑,并且AutoDetectChangesEnabled = true,则会跟踪此更改的链接。
我一直在为插入禁用AutoDetectChangesEnabled,性能有了很大提升。