2012-05-10 62 views
0

我有一個 '分層' 應用:的DbContext - 內部對象列表佈置

  • PresentationMVC
  • ServiceLayer
  • BusinessLogicLayer(BLL)
  • 數據層

我使用來自EntityFramework模型的實體 - 所有圖層的第一種方法。 另外我使用延遲加載。

比如我有一個Employee實體:

[Serializable] 
[DataContract] 
public class Employee 
{ 
    [DataMember] 
    public string name { get; set; } 
    [DataMember] 
    public List<Image> images { get; set; } 
} 

dataLayer中我有例如EmployeeDAO與像操作:

public List<Employee >GetAll() 
{ 
    List<Employee> resultList; 

    using (ModelContainer ctx = new ModelContainer()) // DbContext 
    { 
     resultList = ctx.Employees.All<Employee>().ToList<Employee>(); 
    } 

    return resultList; 
} 

的問題是,我想趁自己一個例外'Object Disposed'爲員工內部的圖像列表,我不知道爲什麼。

謝謝!

回答

1

最有可能是因爲懶加載的。您的GetAll方法創建上下文並在加載員工後處理上下文,但延遲加載需要上下文才能保持活動狀態。您必須在服務層上重新設計應用程序和控制上下文的生存期,否則您不得使用延遲加載。

Btw。如果服務層表示遠程層(WCF或任何其他技術),則根本不應該使用延遲加載。

+0

是的,我已經改變了它。 現在我沒有使用延遲加載並在DbContext中搜索Include方法來獲取某個對象的列表對象。 謝謝拉迪斯拉夫! – gonzalomelov