2011-09-20 41 views
2

我有以下代碼:EF4延遲加載 - 如何強制加載?

public IEnumerable<RMAInfo> GetAllRMAsByReseller(string resellerID) 
    { 
     using (RMAEntities context = new RMAEntities()) 
     { 

      IEnumerable<RMAInfo> ret = from r in GetRMAInfos_Internal(context) 
             where r.ResellerID.ToUpper().Trim() == resellerID 
             select r; 

      return ret; 
     } 
    } 

當我嘗試訪問返回值,我得到的預期的錯誤:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection. 

我知道這是因爲懶加載的發生,這是現在嘗試加載上下文已關閉(通過使用超出範圍)。

我的問題是如何在退出方法之前強制加載?

本來我像

return ret.ToList<RMAInfo>(); 

這工作得很好,但我不知道,如果是做正確的或最好的方法是什麼?

+0

作爲一種風格問題,我會在'using'塊之前聲明'ret'爲'List ',在using語句中使用'ret =(from ...)。ToList()'賦值,然後在上下文處理後返回。這可能沒有什麼區別,但它看起來更清晰,更易於維護。 –

回答

1

這是完美的罰款和接受。

2

query.ToList();是強制加載結果的正確方法。你還會如何強制評估linq查詢?

+0

不確定。這就是我問的原因。 – Scottie

+0

它也可以強制'新列表(IEnumerable )''不是我會在這種情況下使用這樣的。 – 2011-09-20 00:14:48