跟踪与非跟踪查询
跟踪行为决定了 Entity Framework Core 是否将有关实体实例的信息保留在其更改跟踪器中。 如果已跟踪某个实体,则该实体中检测到的任何更改都会在 SaveChanges()
期间永久保存到数据库。
注意:没有主键的实体是不会被跟踪的。但 EF Core 会根据下述规则跟踪带有键的实体类型的所有其他实例。
跟踪查询
返回实体类型的查询是默认会被跟踪的。 这表示可以更改这些实体实例,然后通过 SaveChanges()
持久化这些更改。 在以下示例中,将检测到对博客评分所做的更改,并在 SaveChanges()
期间将这些更改持久化到数据库中。
非跟踪查询
在只读方案中使用结果时,非跟踪查询十分有用(只查不改时)。 可以更快速地执行非跟踪查询,因为无需设置更改跟踪信息。 如果不需要更新从数据库中检索到的实体,则应使用非跟踪查询。 可以将单个查询替换为非跟踪查询。
还可以在上下文实例级别更改默认跟踪行为:
context