【问题标题】:ObjectDisposedException in web serviceWeb 服务中的 ObjectDisposedException
【发布时间】:2012-04-06 22:48:02
【问题描述】:

我正在将 Web 服务作为一个项目进行,但我遇到了一个我似乎无法弄清楚的问题。我认为它与延迟加载和我的 using 语句有关。

这是我的代码:

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 实例已被释放,不能再用于需要连接的操作。 有人吗?

【问题讨论】:

  • 你的 using 语句在哪里?您需要添加更多代码(GetMedium 等)才能获得答案

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    据我了解,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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 2020-04-28
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多