2011-09-12 94 views
1

我試圖通過WCF服務來回報elementes的若干名單,我想控制在列表中加載的每個對象,以避免序列化和返回結果的堆棧溢出異常。禁用延遲加載EF無法正常工作?

我將這個列表填充到實體的LINQ中,並且我已經爲EF模型禁用了延遲加載......但是當我嘗試它時,許多引用都被填充,並在嘗試返回列表時引發異常。

這是一個例子:

public class DelegacionesDAO : IDelegacionesDAO 
    { 
     Model.Entities entities = new Model.Entities(); 

     public DelegacionesDAO() 
     { 
      entities.ContextOptions.ProxyCreationEnabled = false; 
      entities.ContextOptions.LazyLoadingEnabled = false; 
     } 

    public List<Model.Things> GetDelegaciones() 
      { 
       IQueryable<Model.Things> thingsList= from things in entities.Things 
                select things; 

       return thingsList.ToList<Model.Things>(); 
      } 
} 

,此表由其他像「人」(誰擁有的東西)引用,這是問題,當我試圖返回它的「東西」,每一個「事「有一份」人員「及以後的名單。

我錯過了什麼?

在此先感謝!

編輯: 增加了一些更多的代碼。現在,它的工作......我認爲當你嘗試「看」它,即使它沒有加載,它加載每個導航屬性:-S

現在我只有懷疑,如果我做的很好創建實體在構造函數中通過WCF使用它。

+0

顯示整個代碼 - 用於創建和部署的實體並在您配置它特別的一部分。 –

+0

我已經添加了一些代碼,現在;-) – zapico

回答

2

不要長期生活工作環境(場「在您的案件實體)與WCF工作時:

  • 它不是來自不同線程的線程安全(尤其是調用的SaveChanges而其他線程正在準備數據)
  • 的情況下,只要你沒有明確使用MergeOption.NoTracking收集和同事要裝入每一個實體()
+0

所以,我應該怎麼辦?而不是在每個查詢之前創建實體對象? – zapico

+0

是的,像這樣'使用(var上下文=新實體()){返回query.ToList(); }' – springy76

+0

謝謝,但這不能解決我的「所有引用加載」的問題呢? – zapico

1

如果你延遲加載關掉你必須告訴EF加載引用。

試試這個:

var thingsList= (from things in entities.Things 
       select things) as ObjectQuery<Model.Things>; 
thingsList = thingsList.Include("Persons"); //name of navigation property 

return thingsList.ToList<Model.Things>(); 
+0

感謝您的幫助,我已經指出了這一點,但我的問題恰恰相反。 – zapico