Возврат сложных объектов с использованием WebApi с использованием Entity Framework 4 - PullRequest
2 голосов
/ 15 декабря 2011

Я создал REST-сервис, используя WebApi и Entity Framework.В моем приложении у меня есть 2 проекта - один с функциональностью API, а другой с классами моделей, которые я буду использовать в своем веб-проекте.

Проблема, с которой я столкнулся, заключается в том, что я не могу визуализироватьдочерние коллекции для любого из объектов.Скажем, например, что у меня есть следующие 2 класса:

    public class User
    {
        public int UserId { get; set; }

        public string Name { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public virtual Collection<Achievement> Achievements { get; set; }
    }

    public class Achievement
    {
        public int AchievementId { get; set; }

        public string Achievement { get; set; }
        public string Value { get; set; }

        public User User { get; set; }
    }

, и я хотел получить сущность пользователя и коллекцию всех достижений пользователя, используя следующий вызов в мой репозиторий (при условии, что у меня есть DbSetдля каждого из двух уже имеющихся объектов)

var user = dbContext.Users
                .Include(u=>u.Achievements)
                .Where(u=>u.UserId == 1)
                .First();

Я выполнил этот код и отладил с помощью метода, содержащего приведенное выше утверждение, и он корректно получает всю необходимую мне информацию, однако после этогоуказать, что данные не отображаются в браузере, вместо этого возвращается ноль длины содержимого.

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

Спасибо.

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Фундаментальный элемент, который вам не хватает, и вы далеко не одиноки, заключается в том, что работа инфраструктуры Web API заключается в том, чтобы позволить вам использовать HTTP для передачи полезных нагрузок из точки A в точку B.

Как создаются эти полезные нагрузки, это совершенно отдельная проблема, и ее следует рассматривать как отдельную часть вашего приложения. Команда Web API попыталась встроить несколько простых инструментов построения полезной нагрузки для простых случаев, но если вы пытаетесь создать какое-либо приличное приложение, я предлагаю вам полностью контролировать этот процесс. Не ожидайте, что Web API сделает это за вас.

0 голосов
/ 26 января 2012
let me know if its a serialization issue.

[DataContract]  
public class User
{
    [DataMember]
    public int UserId { get; set; }

  [DataMember]
        public string Name { get; set; }

  [DataMember]
        public string FirstName { get; set; }

  [DataMember]
        public string LastName { get; set; }

  [DataMember]
        public virtual Collection<Achievement> Achievements { get; set; }
    }

   [DataContract]  
    public class Achievement
    {

  [DataMember]
        public int AchievementId { get; set; }

  [DataMember]
        public string Achievement { get; set; }

  [DataMember]
        public string Value { get; set; }

  [DataMember]
        public User User { get; set; }
    }
...