标记存档:asp.net

ef core让我们最终定义notracking dbContexts

回到2012年,我向EF6添加了一个功能请求,允许我们定义一个上下文,它永远不会跟踪从数据库中检索到的实体。

支持只读上下文或dbset

如果您有一个用于只读数据的dbContext,那么这就不必在所有查询中添加asNotTracking。更重要的是,如果您的dbContext用于将要断开连接的数据,因此从不跟踪后期查询。这意味着Web API、服务或控制器。如果您检索大量数据,并且没有更新计划,那么跟踪可能会很昂贵。必须记住在每个查询中添加asnotracking是一个PIA。

我刚刚发现,这是可能的EF核心,我认为它甚至在EF核心1.0版本!

有一个名为QueryTrackingBehavior的ChangeTracker属性,它采用了一个QueryTrackingBehavior枚举,其选项为NotTracking和TrackAll。

有很多地方可以使用它,但我对感到兴奋的是,将它直接放置在dbContext的构造函数中,使上下文默认为从不跟踪任何实体。

public class bookContext:dbContext public booksreadonlycontext()changetracker.querytrackingbehavior=querytrackingbehavior.nottracking;}公用数据库集
         
          书籍获取;设置;等…
         

一个快速测试,我检索了一些书,检查了changetracker。条目返回0,为了证明这是我5年来一直梦想的!感谢英孚团队!

console.writeline($“跟踪的实体:context.changetracker.entries().count()”);

另一点需要注意的是,正如您总是能够使用dbset的asnotracking方法关闭对特定查询的跟踪一样,现在,您可以使用Astracking打开特定查询的跟踪。