C# 查询实体框架时出错,OutOfMemoryException或使用context.AsNoTracking()时出错
我试图通过Json(使用Ajax)将列表返回到应用程序。我已经试过两种方法: 使用selectC# 查询实体框架时出错,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(); .其中(表达式)方法: 它们都很好用 注意
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();