• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd "Object reference not set to an instance of an object" podczas tworzenia aplikacji w Blazor

Object Storage Arubacloud
0 głosów
587 wizyt
pytanie zadane 28 lutego 2022 w C# przez Idezam Początkujący (410 p.)
edycja 1 marca 2022 przez Idezam

Hej.

Tworzę aplikację crudową w blazor, otrzymuję następujący błąd: 

Nie rozumiem w czym może leżeć problem, sam błąd wskazuje na linijkę 26 w pliku SuperHeroes, ale nie mam pomysłu o co może chodzić i jak to naprawić. 

 

1
komentarz 28 lutego 2022 przez adrian17 Ekspert (344,860 p.)
Jak dobrze czytam, to `hero.Comic` jest nullem. Spójrz na JSONa zwracanego z API i zobacz czy nie ma tam nulli - jak nie ma, to wypisz sobie wszystkie Heroes i sprawdź czy mają Comic będący nullem.
komentarz 28 lutego 2022 przez Idezam Początkujący (410 p.)

Tak dokładnie, przy zwracanym JSONie z API Comic okazuje się być nullem. 

W jaki sposób mogę to naprawić? Bo z tego co wyczytałem, to ten problem pojawia się wtedy kiedy dosłownie do obiektu nie została przypisana wartość, choć teoretycznie powinien mieć tę wartość przypisaną zawsze. W innym miejscu wyczytałem że to problem z awaitami, przez co statyczne elementy ładują się zanim reszta jest załadowana, ale dalej nie przychodzi mi do głowy jak to rozwiązać.

komentarz 28 lutego 2022 przez PH03NIX Mądrala (6,130 p.)

choć teoretycznie powinien mieć tę wartość przypisaną zawsze.

Teoretycznie to on może "nie mieć wartości" albo mieć wartość zgodnie z tym co zostało zadeklarowane w modelu superbohatera

public Comic? Comic { get; set; }

Znak zapytania dosłownie wskazuje, że może być nullem + obiekty "z natury", a raczej odwołania do nich mogą być nullami, gdyż null oznacza odwołanie, które nie wskazuje na żaden obiekt.

komentarz 28 lutego 2022 przez Idezam Początkujący (410 p.)
Tak, źle się wyraziłem, źle też zadałem pytanie. Faktycznie program przez znak zapytania dopuszcza do sytuacji w której zmienna może być nullem. Ja chciałbym się dowiedzieć dlaczego ona jest tym nullem, dlaczego pole "comic" otrzymuje właśnie tę wartość null?
1
komentarz 28 lutego 2022 przez adrian17 Ekspert (344,860 p.)

To zupełnie nie brzmi jak awaity, bardziej jak nie zrobienie czegoś na poziomie bazy danych lub konwersji do JSONa.

(zakładam że zweryfikowałeś że w samej bazie komiksy etc są poprawnie ustawione)

Na przykład (nie znam dobrze EF, kieruję się intuicją), w GetSingleHero masz:

_context.SuperHeroes.Include(h => h.Comic)

Ale w GetSuperHeroes tego Include nie ma - to może sprawić, że baza nie zrobi joina i wrzuci zwykłego nulla do obiektu.

komentarz 28 lutego 2022 przez Idezam Początkujący (410 p.)

Takk, o to chodziło! Bardzo dziękuję, faktycznie przeoczyłem konieczność wrzucenia Include. Jeszcze jedno mam małe pytanko, bo dodałem include i wszystko pięknie działa, tylko visual studio nadal pokazuje mi taki warning: 

Da się coś z tym zrobić? W sensie ja jestem świadomy tego że to jest nullable object, ale można się jakoś pozbyć tego ostrzeżenia?

komentarz 28 lutego 2022 przez PH03NIX Mądrala (6,130 p.)
Tak dokładnie w ef domyślnie włączony jest lazy loading i trzeba jawnie pokazać, że chcemy pobrać dodatkowe dane.

Dodanie include przed ToListAsync do drugiej metody powinno rozwiązać problem.
komentarz 28 lutego 2022 przez PH03NIX Mądrala (6,130 p.)

@Idezam, Inicjalizacja pustym obiektem pola Comic lub usunięcie ? z typu pola powinna rozwiązać problem. 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 293 wizyt
0 głosów
1 odpowiedź 497 wizyt
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 12 stycznia 2023 w C# przez Dzik1121 Nowicjusz (160 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...