EF跟踪与非跟踪查询
EF跟踪查询非跟踪查询
Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据。
跟踪行为控制 Entity Framework Core 是否在其更改跟踪器中保留有关实体实例的信息。 如果跟踪实体,在 期间 SaveChanges
,实体中检测到的任何更改将保存到数据库中。
跟踪查询:
默认情况下对数据的访问都是启用模型跟踪。 跟踪查询意味着对实体所做的任何更改都由 SaveChanges
持久化。在跟踪查询中返回结果时,EF Core 会检查实体是否已在上下文中。 如果 EF Core 找到现有实体,则返回相同的实例,这可能使用更少的内存,并且比无跟踪查询更快。 EF Core 不会使用数据库值覆盖条目中实体属性的当前值和原始值。 如果在上下文中找不到实体,EF Core 会创建一个新的实体实例并将其附加到上下文。 查询结果不会包含任何已添加到上下文但尚未保存到数据库中的实体。
非跟踪查询:
只做查询显示,不对实体更改, 使用非跟踪查询可以提高效率,因为无需设置更改跟踪信息。使用AsNoTracking方法查询不会对实体做出修改,在SaveChanges()时,不会提交到数据库中。