理解:
EFCore通过一种机制实时追踪实体的属性是否有改变的一种机制,比如下方代码
通过EFCore查出来的数据List集合里的实体,在item.Manager = "菲菲";属性改变后,EFCore自动将实体的状态更改为Modified,
context.SaveChanges();只会提交状态标记为“Modified”的实体对象
IQueryable<Classes> List = context.Classeses.Where(s => s.Name.Contains("二年")); foreach (var item in List) { item.Manager = "菲菲"; }
context.SaveChanges();
等价代码
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查询实体时,设置实体的状态为不追踪,取消追踪性能会更好。但是有相关更改操作的时候要手动标记实体更改状态
context.Entry(item).State = EntityState.Modified;
如果不手动标记,context.SaveChanges();不会提交更改