WCF и Entity Framework с помощью Telerik GridModel - PullRequest
0 голосов
/ 28 октября 2011

Это перекрестная публикация на форумах поддержки Telerik .

У меня есть контекст Entity Framework (Code First, 4.1), который используется на уровне сервиса WCF.Если у меня настроен сервис таким образом:

public IEnumerable<Dto.PlanMember> GetPlanMembers() {
    var planMembers = from member in this.DataSource.PlanMemberDbSet.Take(10)
                      select new Dto.PlanMember {
                          Id = member.Id,
                          FirstName = member.FirstName,
                          LastName = member.LastName
                      };

    return planMembers;
}

Сервис работает нормально.Если я настрою это так, следуя примерам привязки к сетке через веб-сервисы ...

public GridModel GetPlanMembers(GridState state) {
    var planMembers = from member in this.DataSource.PlanMemberDbSet.Take(10)
                      select new Dto.PlanMember {
                          Id = member.Id,
                          FirstName = member.FirstName,
                          LastName = member.LastName
                      };

    return planMembers.ToGridModel(state);
}

Это последовательно получит исключение:

Базовое соединение было закрыто: соединение было неожиданно закрыто.

Я уверен, что это проблема сериализации.По какой-то причине метод расширения ToGridModel не работает должным образом с EFCF 4.1.Что можно сделать, чтобы это исправить?

Это тоже не работает, поэтому это должно быть связано с сериализацией типа GridModel, а не с самим методом расширения, в этом проблема:

public GridModel GetPlanMembers(GridState state) {
    var planMembers = from member in this.DataSource.PlanMemberDbSet.Take(10)
                      select new Dto.PlanMember {
                          Id = member.Id,
                          FirstName = member.FirstName,
                          LastName = member.LastName
                      };

    var gridModel = new GridModel {
        Data = planMembers,
        Total = planMembers.Count()
    };

    return gridModel;
}

1 Ответ

2 голосов
/ 28 октября 2011

Проблема в том, что LINQ-запросы задерживают выполнение. Итак, вы возвращаете IQueryable. Данные фактически не извлекаются, пока WCF не попытается их сериализовать. Проблема в том, что ваше соединение уже закрыто в этот момент. Киньте туда .ToList(), и вам будет хорошо.

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