Ich verstehe die Frustration der OP, diese Verwendung von virtuell ist nicht für die Vorlagenabstraktion gedacht, für die der virtuelle Modifikator defacto wirksam ist.
Wenn noch jemand damit zu kämpfen hat, würde ich meinen Standpunkt darlegen, da ich versuche, die Lösungen einfach und den Jargon auf ein Minimum zu beschränken:
Das Entity Framework in einem einfachen Teil verwendet das verzögerte Laden, was dem Vorbereiten von etwas für die zukünftige Ausführung entspricht. Das passt zum "virtuellen" Modifikator, aber dazu gehört noch mehr.
Wenn Sie in Entity Framework eine virtuelle Navigationseigenschaft verwenden, können Sie diese als Äquivalent eines nullbaren Fremdschlüssels in SQL bezeichnen. Sie MÜSSEN nicht eifrig jeder Schlüsseltabelle beitreten, wenn Sie eine Abfrage ausführen, aber wenn Sie die Informationen benötigen, werden sie bedarfsgesteuert.
Ich habe auch nullable erwähnt, da viele Navigationseigenschaften zunächst nicht relevant sind. dh In einem Kunden- / Bestellszenario müssen Sie nicht bis zu dem Moment warten, in dem eine Bestellung bearbeitet wird, um einen Kunden zu erstellen. Sie können, aber wenn Sie einen mehrstufigen Prozess hatte dies zu erreichen, können Sie die Notwendigkeit finden , beharren die Kundendaten für eine spätere Fertigstellung oder für die Bereitstellung auf zukünftige Aufträge. Wenn alle Nav-Eigenschaften implementiert wären, müssten Sie beim Speichern jeden Fremdschlüssel und jedes relationale Feld einrichten. Das setzt die Daten wirklich nur wieder in den Speicher zurück, was die Rolle der Persistenz zunichte macht.
Obwohl es in der tatsächlichen Ausführung zur Laufzeit kryptisch erscheint, habe ich festgestellt, dass die beste Faustregel lautet: Wenn Sie Daten ausgeben (in ein Ansichtsmodell oder ein serialisierbares Modell einlesen) und Werte vor Referenzen benötigen, tun Sie dies nicht benutze virtuell; Wenn in Ihrem Bereich Daten erfasst werden, die möglicherweise unvollständig sind oder gesucht werden müssen und nicht alle für eine Suche abgeschlossenen Suchparameter erforderlich sind, verwendet der Code die Referenz gut, ähnlich wie bei der Verwendung von Eigenschaften mit nullbaren Werten int? lange?. Das Abstrahieren Ihrer Geschäftslogik von Ihrer Datenerfassung bis zum Einfügen hat viele Leistungsvorteile, ähnlich wie das Instanziieren eines Objekts und das Starten bei Null. Entity Framework verwendet viel Reflexion und Dynamik, was die Leistung beeinträchtigen kann. Die Notwendigkeit eines flexiblen Modells, das an die Anforderungen angepasst werden kann, ist für die Verwaltung der Leistung von entscheidender Bedeutung.
Für mich war das immer sinnvoller als die Verwendung von überladenem Fachjargon wie Proxies, Delegierten, Handlern und dergleichen. Sobald Sie Ihre dritte oder vierte Programmiersprache erreicht haben, kann es mit diesen unordentlich werden.