默认情况下,ef6能够在调用以下方法时自动判别实体是否变更:
- DbSet.Find
- DbSet.Local
- DbSet.Remove
- DbSet.Add
- DbSet.Attach
- DbContext.SaveChanges
- DbContext.GetValidationErrors
- DbContext.Entry
- DbChangeTracker.Entries
当上下文追踪很多实体,并且你在一个循环中调用很多次这些方法的时候,你可以在循环之前先关闭自动识别功能,可以极大提升效率。例如:
using (var context = new BloggingContext()) { try { context.Configuration.AutoDetectChangesEnabled = false; // Make many calls in a loop foreach (var blog in aLotOfBlogs) { context.Blogs.Add(blog); } } finally { context.Configuration.AutoDetectChangesEnabled = true; } }
注意不要忘记循环结束后重新开启这个功能。