2015-04-14 33 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();