【发布时间】:2025-12-04 02:45:01
【问题描述】:
我有一个获取实体及其一些导航属性的 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一次,因此您的第一个示例是正确的。我相信第二个会抛出运行时异常(不确定是哪一个)。 -
如果您链接多个 LINQ 方法,您总是将返回的序列从前一个方法传递到下一个方法。所以在
AsNoTracking之后你有一个查询,返回的实体不会被缓存 -
感谢您的帮助
-
以上两个cmets都是错误。
标签: c# entity-framework linq