AsNoTracking() and Include



我有一个 Linq 查询,用于获取实体及其一些导航属性。

context.MyEntity
    .AsNoTracking()
    .Include(i=> i.Nav1)
    .Include(i=> i.Nav2)
    .Where(x=> x.Prop1==1)
    .FirstOrDefault();

我的问题是:

上述查询是否足以不跟踪MyEntity或导航属性NAv1 Nav2,或者我必须为每个导航属性添加AsNoTracking

喜欢这个:

context.MyEntity
    .AsNoTracking()
    .Include(i=> i.Nav1)
    .AsNoTracking()
    .Include(i=> i.Nav2)
    .AsNoTracking()
    .Where(x=> x.Prop1==1)
    .FirstOrDefault();

在完成所有查询参数之后,但在将数据移动到内存之前,使用 AsNoTracking。在此示例中,您需要:

context.MyEntity
    .Include(i=> i.Nav1)
    .Include(i=> i.Nav2)
    .Where(x=> x.Prop1==1)
    .AsNoTracking()
    .FirstOrDefault();

不会跟踪父实体的任何子对象。

在 .net 核心中,请考虑使用:

context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

这将禁用作为配置而不是查询属性的跟踪行为(请注意,该行为仅适用于该上下文,除非您将其添加到上下文构造函数)。

最新更新