Rozumiem frustrację PO, to użycie wirtualnego nie jest przeznaczone do szablonowej abstrakcji, na którą działa modyfikator wirtualny defacto.
Jeśli ktoś nadal ma z tym problem, oferuję punkt widzenia, ponieważ staram się, aby rozwiązania były proste, a żargon minimalny:
Entity Framework w prostym kawałku wykorzystuje leniwe ładowanie, co jest odpowiednikiem przygotowania czegoś do przyszłego wykonania. To pasuje do modyfikatora „wirtualnego”, ale jest coś więcej.
W Entity Framework użycie wirtualnej właściwości nawigacji pozwala oznaczyć ją jako odpowiednik dopuszczalnego klucza obcego w SQL. Nie musisz chętnie dołączać do każdej tabeli z kluczami podczas wykonywania zapytania, ale kiedy potrzebujesz informacji - staje się to zależne od zapotrzebowania.
Wspomniałem również o wartości zerowej, ponieważ wiele właściwości nawigacji nie jest na początku istotnych. tzn. w scenariuszu klienta / Zamówienia nie trzeba czekać do momentu przetworzenia zamówienia, aby utworzyć klienta. Możesz, ale jeśli miałeś wieloetapowy proces, aby to osiągnąć, możesz potrzebować trwać dane klienta do późniejszego zakończenia lub do wdrożenia przyszłych zamówień. Jeśli wszystkie właściwości nawigacji zostałyby zaimplementowane, trzeba będzie ustanowić każde pole klucza obcego i pole relacyjne w składowaniu. To naprawdę po prostu przywraca dane do pamięci, co eliminuje rolę trwałości.
Chociaż może się to wydawać tajemnicze w rzeczywistym wykonaniu w czasie wykonywania, znalazłem najlepszą praktyczną zasadę: jeśli wysyłasz dane (wczytujesz do View Model lub Serializable Model) i potrzebujesz wartości przed referencjami, nie rób używać wirtualnego; Jeśli twój zakres zbiera dane, które mogą być niekompletne lub wymagają wyszukiwania i nie wymagają uzupełnienia każdego parametru wyszukiwania, kod dobrze wykorzysta odwołanie, podobnie jak użycie właściwości wartości zerowej int? długie?. Ponadto, abstrahując logikę biznesową od gromadzenia danych, dopóki nie trzeba jej wstrzykiwać, ma wiele korzyści związanych z wydajnością, podobnie jak tworzenie instancji obiektu i rozpoczynanie go od zera. Entity Framework wykorzystuje wiele refleksji i dynamiki, które mogą obniżyć wydajność, a potrzeba posiadania elastycznego modelu, który można skalować do zapotrzebowania, ma kluczowe znaczenie dla zarządzania wydajnością.
Dla mnie zawsze miało to większy sens niż używanie przeciążonego żargonu technologicznego, takiego jak serwery proxy, delegaci, osoby obsługujące i tym podobne. Gdy uderzysz w swój trzeci lub czwarty język programowania, może się z nimi bałaganić.