2012-05-10 63 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