理解:

EFCore通过一种机制实时追踪实体的属性是否有改变的一种机制,比如下方代码

通过EFCore查出来的数据List集合里的实体,在item.Manager = "菲菲";属性改变后,EFCore自动将实体的状态更改为Modified,

1
context.SaveChanges();只会提交状态标记为“Modified”的实体对象
1
2
3
4
5
IQueryable<Classes> List = context.Classeses.Where(s => s.Name.Contains("二年"));
               foreach (var item in List)
               {
                   item.Manager = "菲菲";
               }<br>context.SaveChanges();

等价代码

1
2
3
4
5
6
7
IQueryable<Classes> List = context.Classeses.Where(s => s.Name.Contains("二年")).AsNoTracking();
               foreach (var item in List)
               {
                   item.Manager = "菲菲";
                   context.Entry(item).State = EntityState.Modified;
               }
               context.SaveChanges(); 

在上述代码里我们通过EFCore查询实体时,设置实体的状态为不追踪,取消追踪性能会更好。但是有相关更改操作的时候要手动标记实体更改状态

1
context.Entry(item).State = EntityState.Modified;<br>如果不手动标记,context.SaveChanges();不会提交更改