Web服务中的ObjectDisposedException

时间:2012-03-22 11:15:09

标签: c# .net web-services exception-handling

我正在做一个项目的Web服务,我有一个问题,我似乎无法弄清楚。我认为它是关于延迟加载和我的使用声明的东西。

继承我的代码:

public List<MediumRole> MediumGetParticipants(int mediumId, int itemsPrPage, int page)
{
    Medium medium = MediaHelper.GetMedium(mediumId);

    // Check if media not is null
    if (medium == null) return null;

    return medium.MediumRoles.Page(page, itemsPrPage).ToList();
}

我得到一个例外

  

System.ObjectDisposedException:ObjectContext实例已被释放,不能再用于需要连接的操作。   任何人?

2 个答案:

答案 0 :(得分:1)

据我所知,Medium类对MediumRoles的集合进行了延迟加载代理引用。

由于MediaHelper.GetMedium(mediumId)方法处理引用Medium的数据库上下文而导致异常。

要解决此问题,您可以执行以下操作:

public static List<MediumRole> MediumGetParticipants(int mediumId, int itemsPrPage, int page)
    {
        Medium medium = MediaHelper.GetMedium(mediumId);
        // Check if media not is null
        if (medium == null) return null;
        using (var context = new DbContext())
        {
          context.Attach(medium);
          return medium.MediumRoles.Page(page, itemsPrPage).ToList();
        }
    }

答案 1 :(得分:0)

我猜你使用了Entity Framework,启用了延迟加载(这是默认设置),并在ObjectContext方法中配置了EF的GetMedium。当您访问MediumRoles属性时,EF希望延迟加载集合,但它不能,因为ObjectContext已经处理掉了。要解决此问题,您可以更改代码,以便在调用ToList后处理上下文,或者在MediumRoles方法中急切加载GetMedium集合。