OData WCF Data Services - связанные данные (по внешнему ключу) не отображаются при вызове службы - PullRequest
3 голосов
/ 09 сентября 2010

Когда я получаю данные, используя URL-адрес в браузере, я могу видеть связанные данные, например:

http://localhost/services.svc/Dinners(1)/RSVPs

, в котором перечислены 5 RSVP для DinnerId = 1в моем случае, но когда я потребляю OData из другого проекта, я могу только получить Dinners, отладка приложения показывает, что RSVPs = 0, а это должно быть 5.

Я использую службудобавив ссылку на сервис в мой проект и вернув данные с помощью очень простого запроса LINQ:

public ActionResult Index()
        {
            var result = (from d in db.Dinners
                          select d);

            return View(result);
        }

Есть идеи, почему d.RSVPs = 0, когда он должен быть заполнен?Я использую EF (сначала код - за сообщением от ScottGu, с двумя очень простыми классами POCO для Dinner и RSVP. Класс Dinner содержит коллекцию RSVP: public ICollection<RSVP> RSVPs { get; set; }, а класс RSVP указывает на Dinner с внешним ключомpublic int DinnerId { get; set; } а также класс Обеда: public Dinner Dinner { get; set; }.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

Вам необходимо использовать Expand () для доступа к нескольким уровням возвращаемого графа объектов.

Загрузка отложенного содержимого (службы данных WCF)

Что-то вроде:

var result = (from d in db.Dinners.Expand("RSVPs")
                      select d);
1 голос
/ 11 сентября 2010

Очевидно, проблема в ключевом слове virtual, когда я создаю классы POCO со связанными таблицами. Если у меня есть ключевое слово virtual при ссылке на ICollection<RSVP> внутри класса Dinner или Dinner в моем классе RSVP, отложенная загрузка включена, но служба данных WCF перестала работать! Если вынуть ключевое слово virtual, служба данных WCF снова начнет работать, но тогда у меня не будет отложенной / отложенной загрузки! Я не уверен, что это особенность или ошибка ?! Пока, я думаю, я подожду следующего выпуска, чтобы действительно начать использовать EF POCO и WCF Data Service.

Спасибо всем за внимание.

...