Как вернуть сущность, которая является запросом нескольких таблиц - PullRequest
5 голосов
/ 10 февраля 2011

У меня есть веб-сервис, который использует Entity Framework для хранения и предоставляет публичный API для операций CRUD.

Если у меня есть такая сущность, как «Пользователь», которая имеет отношение «1 ко многим» с сущностью «Автомобиль», как мне легко вернуть в методе веб-службы GetUser (int userId) экземпляр пользователя, который выглядит следующим образом:

public class User{
  string Id;
  IEnumberable<Car> Cars;
}

Работает ли это по умолчанию в рамках сущности, потому что я предполагаю, что свойство Cars лениво при использовании его на стороне сервера.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Объекты Entity сериализуемы, и вы автоматически получите свойство Cars.

Однако, в зависимости от вашего запроса LINQ, свойство Cars может загружаться или не загружаться. Если вы всегда хотите загрузить свойство Cars в рамках данного веб-метода, вам следует явно загрузить это свойство. Ниже приведены несколько способов гарантировать загрузку объекта Cars.

1) используйте метод Include ("Cars") в вашем запросе LINQ.

2) использовать проекцию.

3) Явно загрузить свойство Cars для экземпляра объекта User. Например,

userA.Cars.Load()
2 голосов
/ 10 февраля 2011

Прежде всего, вы должны [Include] Автомобили с определением метаданных User сущности. Также вам, вероятно, нужно переписать метод getUsers(), чтобы заполнить автомобили. Как то так.

public IQueryable<User> GetUsers()
{
    return this.ObjectContext.User.Include("Cars");
}

Это не легко объяснить в ближайшее время, я рекомендую вам посетить этот и этот веб-сайты.

Надежда помогает!

0 голосов
/ 10 февраля 2011

Я использовал LINQ-To-SQL для достижения аналогичного результата, и для меня это «просто сработало».Я бы попробовал и посмотрел, что получится.Возможно, вам придется явно определить [DataContract] для элементов.

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