ObjectDisposedException в веб-сервисе - PullRequest
0 голосов
/ 22 марта 2012

Я занимаюсь веб-службой как проектом, и у меня есть проблема, которую я просто не могу понять.Я думаю, что это что-то про ленивую загрузку и мое заявление об использовании.

Вот мой код:

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 ]

1 голос
/ 22 марта 2012

Как я понял, 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();
        }
    }
0 голосов
/ 22 марта 2012

Я предполагаю, что вы используете Entity Framework, включили отложенную загрузку (это по умолчанию) и располагаете EF ObjectContext в методе GetMedium. Когда вы получаете доступ к свойству MediumRoles, EF хочет лениво загрузить коллекцию, но не может, так как ObjectContext уже удален. Чтобы решить эту проблему, вы можете изменить свой код таким образом, чтобы контекст вызывался после вызова ToList или чтобы коллекция MediumRoles загружалась с нетерпением в методе GetMedium.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...