Dlaczego leniwe ładowanie nie działa?

Dlaczego leniwe ładowanie nie działa?
Severus Snape
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Hej,
Uczę się właśnie korzystania z EF.
Mam encję AccommodationCategory

Kopiuj
 public class AccommodationCategory
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int CategoryId { get; set; }
        public string CategoryName { get; set; }
        public ICollection<Resource> Resources { get; set; }
        public virtual ICollection<AccommodationInfrastructure> AccommodationInfrastructures { get; set; }
    }

Posiada ona kolekcję AccommodationInfrastructures którą chciałbym, aby EF załadował, jak będzie potrzeba (odwołam się do tego pola).

W celach testu napisałem takie instrukcje:

Kopiuj
            AccommodationCategory category = _context.AccommodationCategories.FirstOrDefault();
            AccommodationInfrastructure infrastructure = category.AccommodationInfrastructures.Where(w => w.Name == "Value").FirstOrDefault();

Niestety, kolekcja AccommodationInfrastructures jest w tym przypadku nullem, bo nie zaciągnęło z bazy danych, i wyrzuca NullPointerException.
Dlaczego mi to nie działa? Potrzebujecie jeszcze jakiegoś kodu aby zdiagnozować problem?

  1. Kolejne pytanie mam do samego LazyLoadingu. W jaki sposób podejść do problemu ładowania AccommodationInfrastructures spełniające dany warunek dla każdej kategorii? Dodam, że będzie duża ilość tych obiektów dla kategorii, więc raczej nie można pobrać wszystkich. W tym wypadku lepsze będzie Lazy czy Eager?
    Moim zdaniem lepiej Lazy, gdyż można zrobić po prostu tak? A całe filtrowanie będzie po stronie bazy danych?
Kopiuj
List<AccommodationInfrastructure> infrastructures = category.AccommodationInfrastructures.Where(w => w.Name == "Value").ToList();

Dzięki i pozdrawiam

VA
  • Rejestracja: dni
  • Ostatnio: dni
1

Jeśli to jest EF Core to musisz w konfiguracji wywołać metodę UseLazyLoadingProxies albo użyć LazyLoadera w definicji konkretnego typu

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.