Zrozumieć LINQ - EF Core

0

Witam
Przerabiam właśnie jeden z tutoriali ASP.NET i próbuję go uruchomić na ASP.NET Core. Mam jednak problem z zapytaniem LINQ jak poniżej. Teoretycznie powinno mi ono zwrócić Notifications wraz z powiązanymi Gig oraz Artists. Problem w tym, że zwraca Notifications, ale Gig ustawione jest na null (UserNotifications jest powiązaniem many-to-many pomiędzy Notifications i User; Notification jest natomiast powiązany z Gig, a Gig z Artist).

            
var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            var notifications = _context.UserNotifications
                .Where(un => un.UserId == userId)
                .Select(un => un.Notification)
                .Include(g => g.Gig.Artist)
                .ToList();

Problem rozwiązuje dodanie czegoś takiego jak poniżej przed powyższym zapytaniem.

            
            var notificationsTest = _context.Notifications  
                .Include(u => u.Gig).ThenInclude(u => u.Artist)  
                .ToList();

Teraz pytanie w jaki sposób można to zapisać w formie pojedynczego zapytania lub ewentualnie co można poprawić w oryginalnym zapytaniu, żeby to działało.
Z góry dzięki za pomoc

0

Z jakiej wersji Entity Frameworka korzystasz?

EF Core nie wspiera jeszcze lazy-loadingu, więc wszystkie powiązanie trzeba ładować jawnie.

0

Używam EF Core, ale nie za bardzo rozumiem kwestii lazy-loadingu. W tym oryginalnym zapytaniu dogrywam po Select dane za pomocą Include i to jest eager-loading jak dobrze rozumiem? Więc dlaczego ich nie dostaję jako wynik?

0

Ale to, że Gig jest ustawione na null to chodzi ci o to, że tutaj .Include(g => g.Gig.Artist)?

Nie musisz tutaj jeszcze wcześniej właśnie zrobić .Include(un => un.Gig)?

0

Nie. Właśnie nawet jak pominę kolejny poziom czyli Artist i próbuję dograć za pomocą Include samo Gig to też nie działa i nie wiem czemu. Takie coś jak poniżej ustawia Gig na null. Problem rozwiązuje się jak dogram sobie konieczne elemety oddzielnym zapytaniem wcześniej.

            var notifications = _context.UserNotifications
                .Where(un => un.UserId == userId)
                .Select(un => un.Notification)
                .Include(g => g.Gig)
                .ToList();

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