Middle
Jak odbywa się ładowanie powiązanych encji w C#?
sobes.tech AI
Odpowiedź od AI
Ładowanie powiązanych encji w C# często odbywa się za pomocą bibliotek ORM, takich jak Entity Framework Core. Główne podejścia:
- Ładowanie eager (z wyprzedzeniem): Powiązane dane są ładowane razem z główną encją w jednym zapytaniu do bazy danych.
// Użycie metody Include do ładowania eager var postsWithComments = context.Posts .Include(p => p.Comments) .ToList(); - Ładowanie explicit (jawne): Powiązane dane są ładowane explicite po uzyskaniu głównej encji.
Dla pojedynczych właściwości nawigacyjnych używa się// Uzyskanie głównej encji var post = context.Posts.Find(1); // Jawne ładowanie powiązanych komentarzy context.Entry(post) .Collection(p => p.Comments) .Load();.Reference()zamiast.Collection().// Jawne ładowanie powiązanego autora context.Entry(post) .Reference(p => p.Author) .Load(); - Lazy loading (leniwe ładowanie): Powiązane dane są automatycznie ładowane przy pierwszym odwołaniu się do nich. Wymaga konfiguracji proxy lub wstrzykiwania zależności i jest domyślnym zachowaniem w niektórych ORM.
W Entity Framework Core konieczna jest instalacja pakietu// Przy włączonym leniwym ładowaniu var post = context.Posts.Find(1); // Odwołanie do Comments wywołuje ładowanie int commentCount = post.Comments.Count;Microsoft.EntityFrameworkCore.Proxiesi wywołanie.UseLazyLoadingProxies()w konfiguracjiDbContext. Właściwości nawigacyjne powinny być zadeklarowane jakovirtual.
Wybór metody zależy od scenariusza użycia i kompromisu między wydajnością (liczbą zapytań) a ilością ładowanych danych.