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

C# 查询实体框架时出错,OutOfMemoryException或使用context.AsNoTracking()时出错,c#,json,entity-framework,C#,Json,Entity Framework,我试图通过Json(使用Ajax)将列表返回到应用程序。我已经试过两种方法: 使用select var query = (from ad in db.AddressNamePlaces.AsNoTracking() where ad.cepPlace == zipCode.Replace("-", string.Empty) select ad ).ToList(); .其中(表达式)方法: 它们都很好用 注意

我试图通过Json(使用Ajax)将列表返回到应用程序。我已经试过两种方法:

使用select

var query = (from ad in db.AddressNamePlaces.AsNoTracking()
                     where ad.cepPlace == zipCode.Replace("-", string.Empty)
                     select ad ).ToList();
.其中(表达式)方法:

它们都很好用

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

如果与上述查询一起使用,则会出现以下错误: 当使用NotTracking合并选项返回对象时,仅当EntityCollection或EntityReference不包含对象时才能调用Load


那么,这里出了什么问题?

我找到了解决这个问题的办法。在执行查询之前,我需要将属性“ProxyCreationEnabled”设置为false,代码如下:

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