Как использовать предложение where в рамках сущности? - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь запросить мою базу данных EF Code First, чтобы она возвращала все заказы, которые были сделаны текущим вошедшим пользователем. Я не совсем правильно понимаю синтаксис, и надеюсь, что кто-то может указать мне правильное направление.

Два разных способа, которыми я пытался добиться этого:

List<Booking> bookings = new List<Booking>();
string userid = User.Identity.GetUserId();
foreach(var b in db.Bookings.Where(b => b.Customer.Id == userid))
{
    bookings.Add(b);
}
string userid = User.Identity.GetUserId();
var bookings = db.Bookings.Include(b => b.Customer).Include(b => b.Invoice).Include(b => b.Payment).Include(b => b.Vehicle).Where(b => b.Customer.Id == userid);
return View(bookings.ToList());

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

1 Ответ

1 голос
/ 28 мая 2019

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

Хотя во втором запросе вы указали клиента, счет и т. Д.!В этом случае клиенты возвращаются только в том случае, если у них есть заказ, на который их заказ получил счет, оплату и т. Д.

Этот запрос должен работать с вами:

string userid = User.Identity.GetUserId();
var bookings = db.Bookings
                 .Include(b => b.Customer)
                 .Where(b => b.Customer.Id == userid)
                 .ToList();

return View(bookings);

Похоже, вы используетеEF с включенным EagerMode, поэтому вам нужно Include клиент или любые связанные поля в ваших критериях.

Моя не по теме рекомендация:

Пожалуйста, не возвращайте объекты, извлеченные непосредственно из ORM.Сначала преобразуйте их в DTO (с AutoMapper или любым другим сопоставителем объектов) .

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