正如Ladislav在评论中已经指出的那样,您需要禁用自动更改检测以提高性能:
context.Configuration.AutoDetectChangesEnabled = false;
默认情况下,
DbContextAPI中启用了此更改检测。
DbContext行为与
ObjectContextAPI
如此不同的原因是,启用自动更改检测后,与API的函数相比,API的内部函数
DbContext要调用的更多。
DetectChanges``ObjectContext
在这里,您可以找到
DetectChanges默认调用的那些函数的列表。他们是:
- 的
Add
,Attach
,Find
,Local
,或Remove
成员DbSet
- 的
GetValidationErrors
,Entry
或SaveChanges
成员DbContext
- 在
Entries
对方法DbChangeTracker
特别是导致您体验不佳的
Add呼叫
DetectChanges。
与此形成对比的是,
ObjectContextAPI
DetectChanges仅自动调用,
SaveChanges而不会自动调用
AddObject上述其他相应方法。这就是为什么 默认
性能
ObjectContext更快的原因。
他们为什么
DbContext在这么多功能中引入了这种默认的自动更改检测功能?我不确定,但是
DetectChanges在适当的时候禁用它并手动调用似乎是高级的,并且可以轻松地将细微的错误引入您的应用程序,因此请谨慎使用[it]。



