Entity FrameWork Core 中的跟踪与非跟踪查询

本文探讨了Entity Framework Core中的跟踪查询和非跟踪查询。跟踪查询默认会被跟踪,允许更改并持久化到数据库,而非跟踪查询则适用于只读场景,提高性能。可以通过设置QueryTrackingBehavior为NoTracking来实现非跟踪。即使在自定义投影中,如果结果包含实体类型,EF Core仍会进行跟踪。总结来说,AsNoTracking()用于只查不改的情况。
摘要由CSDN通过智能技术生成

跟踪与非跟踪查询

跟踪行为决定了 Entity Framework Core 是否将有关实体实例的信息保留在其更改跟踪器中。 如果已跟踪某个实体,则该实体中检测到的任何更改都会在 SaveChanges() 期间永久保存到数据库。

注意:没有主键的实体是不会被跟踪的。但 EF Core 会根据下述规则跟踪带有键的实体类型的所有其他实例。

跟踪查询

返回实体类型的查询是默认会被跟踪的。 这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改。 在以下示例中,将检测到对博客评分所做的更改,并在 SaveChanges() 期间将这些更改持久化到数据库中。

非跟踪查询

在只读方案中使用结果时,非跟踪查询十分有用(只查不改时)。 可以更快速地执行非跟踪查询,因为无需设置更改跟踪信息。 如果不需要更新从数据库中检索到的实体,则应使用非跟踪查询。 可以将单个查询替换为非跟踪查询。

还可以在上下文实例级别更改默认跟踪行为:

context

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值