DbContext - 对象中的列表是Disposed

时间:2012-05-10 06:14:41

标签: asp.net-mvc entity-framework

我有一个'分层'应用程序:

  • 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;
}

问题是我在员工内部的图像列表中遇到了“对象处理”异常,我无法弄清楚原因。

感谢!!!

1 个答案:

答案 0 :(得分:1)

很可能是因为延迟加载。您的GetAll方法会在加载员工后创建上下文并处理上下文,但延迟加载需要上下文保持活动状态。您必须重新设计应用程序并控制服务层上的上下文生命周期,否则您不能使用延迟加载。

顺便说一下。如果服务层代表远程层(WCF或任何其他技术),则根本不应使用延迟加载。