使用context.AsNoTracking()时查询实体框架,OutOfMemoryException或错误时出错

时间:2015-04-14 19:46:06

标签: c# json entity-framework

我正在尝试通过Json(使用Ajax)返回应用程序列表到应用程序。我已经尝试过两种方式:

使用选择

var query = (from ad in db.AddressNamePlaces.AsNoTracking()
                     where ad.cepPlace == zipCode.Replace("-", string.Empty)
                     select ad ).ToList();

.Where(Expression)方法:

var query = db.AddressNamePlaces.AsNoTracking().Where(l => l.cepPlace == zipCode.Replace("-", string.Empty)).ToList();

它们都很好。

注意事项:AddressNamePlace中的相关表具有超过770k的记录,如果我使用不带.AsNoTracking()方法,则应用程序将向Json返回OutOfMemoryException。实体框架为每条记录实例化了很多对象,而.AsNoTracking()方法则避免使用它。

如果我使用上面的查询,我收到以下错误: “当使用NoTracking合并选项返回对象时,只能在EntityCollection或EntityReference不包含对象时调用Load。”

那么,这里有什么不对?

1 个答案:

答案 0 :(得分:1)

我找到了这种情况的解决方案。在进行查询之前,我需要将属性“ProxyCreationEnabled”设置为false,代码:

db.Configuration.ProxyCreationEnabled = false;
        var query = db.AddressNamePlaces.AsNoTracking().Where(l => l.cepPlace == zipCode.Replace("-", string.Empty)).ToList();