我有一个可获取实体及其某些导航属性的Linq查询。

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

我的问题是:

上面的查询是否足以不跟踪MyEntity或导航属性NAv1Nav2,还是我必须为每个导航属性添加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();

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

关于c# - AsNoTracking()和包含,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42002540/

10-10 18:13