【发布时间】:2017-11-08 20:03:13
【问题描述】:
我们目前正在为实体框架使用延迟加载并遇到out of memory exception。我们遇到此异常的原因是因为 Linq 查询加载了大量数据,并且在后期它使用延迟加载来加载导航属性。但是因为我们不使用NoTrackingChanges Entity Framework 缓存构建得非常快,这会导致内存不足错误。
我对 EF 的理解是,我们应该始终在查询中使用 NoTrackingChanges,除非您想从查询中更新返回的对象。
然后我使用NoChangeTracking进行测试:
var account = _dbcontext.Account
.AsNoTracking()
.SingleOrDefault(m => m.id == 1);
var contactName = account.Contact.Name
但我收到以下错误:
System.InvalidOperationException:当返回一个带有 NoTracking 合并选项的对象时,只有在 EntityCollection 或 EntityReference 不包含对象时才能调用 Load。
【问题讨论】:
-
请提供导致此异常的代码。
-
@SteveGreene 如果我禁用代理创建,那么延迟加载将不起作用。这是真的吗?
-
@ErikPhilips var account = _dbcontext.Account.AsNoTracking().SingleOrDefault(m=>m.id == 1); var contactName = account.Contact.Name
-
不要将代码或直接相关的 cmets 添加为 cmets,只需更新您的问题,这样其他用户就不必费力通过 cmets 来理解问题。
标签: c# entity-framework entity-framework-6