Problem z pobraniem kolekcji z bazy danych

0

Witajcie
Otóż mam taki problem, że w swoim sklepie internetowym nie mogę pobrać jednej z kolekcji. Próbuję wyświetlić użytkownikowi historię jego zamówień.
Baza danych podzielona na:
Order
OrderItem
Item

I gdy pobieram zamówienie w widoku bez problemu mogę dostać się do orderitem, niestety nie mogę dostać item`a... W debugerze widzę nulla :(

Model wygląda tak(skróciłem klasy, żeby nie zasypywać was zbędnym kodem):

    public class Item
    {
        public int ItemId { get; set; }
        public int GenreId { get; set; }
        ....
        public virtual Genre Genre { get; set;  } //Kategoria
    }

    public class Order
    {
        public int OrderId { get; set; }
        public string UserId { get; set; }
        ....
        public List<OrderItem> OrderItems { get; set; }
        public virtual ApplicationUser User { get; set; }

    }

    public class OrderItem
    {
        public int OrderItemId { get; set; }
        public int OrderId { get; set; }
        public int ItemId { get; set; }
        ...
        public virtual Item Item { get; set; }
        public virtual Order Order { get; set; }

    }

W Widoku zwracam obiekt Order
Tak wygląda struktura widoku

model IEnumerable<PowerON.Models.Order>

            foreach (var order in Model)
            {
                              foreach (var orderItem in order.OrderItems)
                              {
                               orderItem.Item // tu mam error. Niestety wartość jest nullem

                              }
            }

Niestety nie udało mi się samodzielnie znaleźć błędu. Proszę o wsparcie
Pozdrawiam!

2

Pokaż kod jak wyciągasz dane z bazy. Robisz tam Include() ?

0

@kzkzg

        public ActionResult OrdersList()
        {

            IEnumerable<Order> userOrders;

            var userdId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            userOrders = _db.Orders.Where(o => o.UserId == userdId).Include("OrderItems").
            OrderByDescending(o => o.DateCreated).ToArray();
            
            return View(userOrders);

        }

zostawiłem istotny kod

Czyli jeszcze jeden include z item`ami?

0
szydlak napisał(a):

Zobacz to rozwiązanie: https://stackoverflow.com/questions/10822656/entity-framework-include-multiple-levels-of-properties

Rewelacja.
Jak mnie to wkurza kiedy się nad czymś głowię cały dzień a to jest taka bzdura... Skąd miałem wiedzieć, że EF core ma inne podejście?
eh...
Dziękuję za pomoc. Kod dla potomnych

                userOrders = _db.Orders.Where(o => o.UserId == userdId).
                    Include(z => z.OrderItems).ThenInclude(w => w.Item).ToArray();

Czyli w skrócie po "includu" musimy użyć "theninclude" IDE nam nie podpowie akurat tego czego chcemy więc wpisujemy na sztywno.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1