2015-04-14 35 views
1

我试图通过Json(使用Ajax)将应用程序列表返回给应用程序。我已经尝试过在两个方面:查询实体框架时出错,OutOfMemoryException或使用上下文时出错。AsNoTracking()

使用SELECT

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

。凡(表达)方法:

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

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

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