Performance DbContext.Configuration.AutoDetectChangesEnabled始终为True而不是在SaveChanges()之前启用

Performance DbContext.Configuration.AutoDetectChangesEnabled始终为True而不是在SaveChanges()之前启用,performance,ef-code-first,Performance,Ef Code First,我正在尝试提高EF操作性能,并找到了一些关于DbContext.Configuration.AutoDetectChangesEnabled属性的建议 a) 在某些情况下,要关闭AutoDetectChangesEnabled—这很清楚—我将其用于导入函数 b) 但是,我注意到这种方法只在调用SaveChanges()之前启用此属性: 所有的更改似乎都正确地保存到了数据库中,并且与AutoDetectChangesEnabled属性保持不变的方法相比,它的工作速度明显更快 问题 所以我想知道是否

我正在尝试提高EF操作性能,并找到了一些关于DbContext.Configuration.AutoDetectChangesEnabled属性的建议 a) 在某些情况下,要关闭AutoDetectChangesEnabled—这很清楚—我将其用于导入函数 b) 但是,我注意到这种方法只在调用SaveChanges()之前启用此属性:

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

问题

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

相关帖子

这篇文章表明,可能有理由让AutoDetectChangesEnabled==true,但没有明确的证据表明何时以及为什么应该这样做(好的,它说-如果实体是编辑的)。有人发现了支持/反对这一论点吗


如果您查看文档,它会说:

当使用大多数POCO实体时,确定实体如何 已更改(因此需要将哪些更新发送到数据库) 由检测更改算法处理。通过以下方式检测更改: 检测当前属性值之间的差异 实体和存储在快照中的原始属性值 查询或附着实体时

因此,我认为这支持您发现的链接,即如果实体是编辑的,且AutoDetectChangesEnabled=true,则会跟踪更改

我已经禁用了为插入而启用的AutoDetectChangesEnabled,性能有了很大提高

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

//...some changes to POCO properties

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