关于EF Core中ChangeTracker的QueryTrackingBehavior属性行为的澄清问询
EF Core中修改QueryTrackingBehavior的行为澄清
核心行为拆解:
当你把
ChangeTracker.QueryTrackingBehavior从默认的TrackAll改为NoTracking时:- 不会重置此前已读取并跟踪的实体状态:那些已经被ChangeTracker记录的实体(比如你之前读取、更新过的数据)依然保持跟踪状态,它们的变更信息不会被清除。
- 后续新查询的数据将不再被跟踪:之后执行的所有查询,默认都会采用无跟踪模式,除非你在单个查询上用
AsTracking()显式覆盖这个全局设置。
当你再把
QueryTrackingBehavior改回TrackAll时:- 此前被跟踪的实体仍保留跟踪状态:ChangeTracker里之前记录的实体状态(比如Modified、Added等)完全不受全局跟踪模式变更的影响。
- SaveChanges()只会处理有跟踪状态的实体:NoTracking模式下读取的数据因为从未被ChangeTracker记录,SaveChanges()会完全忽略它们,只会执行那些一直处于跟踪状态的实体的更新操作。
内容的提问来源于stack exchange,提问作者Sudhashbahu
相关产品推荐
相关产品推荐

