Przenoszę mój kod .NET Framework (EF6) do Core ASP.NET (EF Core) i natknąłem się na ten problem. Oto przykładowy kod:Używanie EF Core ThenInclude() na tablicach połączeń
W EF6 używam include() i Wybierz() dla chętnych-ładowania:
return _context.Post
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests))
PostAuthor jest tabela skrzyżowanie i tam jest również stół Junction "AuthorInterest", co ja nie wymagało zaangażowania w EF6 (Select goes goes to a.Interests).
W każdym razie widzę, że w EF7 jest to przerobione, co oznacza, że powinienem teraz użyć funkcji ThenInclude() dla zagnieżdżonych zapytań. Jednak ...
return _context.Post
.Include(p => p.PostAuthor)
.ThenInclude(pa => pa.Select(pa2 => pa2.Author))
...etc
Powyższy kod nie powiedzie się z powodu select() oświadczenia. Dokumentacja na https://docs.efproject.net/en/latest/querying/related-data.html wydaje się sugerować, że nie jest mi potrzebna i mogę natychmiast uzyskać dostęp do autora, ale otrzymuję ICollection w ostatniej wyświetlonej wartości lambda, więc oczywiście potrzebuję funkcji Select(). Przechodzę przez wiele tabel połączeń dalej w zapytaniu, ale dla uproszczenia po prostu skupmy się na pierwszym.
Jak to działa?
wow, dzięki. Bardzo dziwne - Visual studio nie dałoby mi intellisense dla pa.Author (zamiast tego sugeruje niektóre metody Linqa) i podkreślił wszystko na czerwono, gdy tylko spróbuję to napisać. Po twoim wpisie zignorowałem VS i po kompilacji wszystko działało jak czar. – nikovn
To dziwne. Używam VS2015 Update 3, i kiedy piszę coś w stylu 'db.Parents.Include (p => p.Children) .ThereInclude (c => c.Child) .TenInclude (c => c.Parents)' I uzyskaj poprawną obsługę IntelliSense przy każdej lambda. –
VS2015 Ultimate Update 3 również tutaj. Nie jestem zaskoczony, mam inne błędy w podstawowych projektach - na przykład gdy wybieram element sugerowany przez intellisense, zapisuję symbole w środku pliku itp. Może to wtyczki ... – nikovn