Я розумію розчарування ОП, це використання віртуального не для шаблонного абстрагування, для якого діє ефективний віртуальний модифікатор дефакто.
Якщо хтось із цим все ще бореться, я б запропонував свою точку зору, тому що намагаюся звести до мінімуму рішення прості та жаргон:
Entity Framework в простому творі використовує ледачий навантаження, що є еквівалентом підготування чогось до майбутнього виконання. Це відповідає «віртуальному» модифікатору, але до цього є більше.
В Entity Framework використання властивості віртуальної навігації дозволяє позначити її як еквівалент нульового зовнішнього ключа в SQL. Ви НЕ МОЖЕТЕ охоче приєднуватися до кожної заповненої таблиці під час виконання запиту, але коли вам потрібна інформація - вона стає залежною від попиту.
Я також згадав нульовий, оскільки багато навігаційних властивостей спочатку не актуальні. тобто у сценарії "Клієнт / Замовлення" вам не доведеться чекати до моменту обробки замовлення для створення замовника. Ви можете, але якщо у вас був багатоетапний процес для досягнення цього, можливо, вам доведеться зберігати дані клієнта для подальшого завершення або для розгортання для майбутніх замовлень. Якщо всі властивості nav були реалізовані, вам доведеться встановити кожне зовнішнє ключове та реляційне поле на збереженні. Це дійсно просто повертає дані назад в пам'ять, що перемагає роль стійкості.
Тож, хоча це може здатися загадковим у фактичному виконанні під час виконання, я виявив, що найкращим правилом, яким ви користуєтесь, було б: якщо ви виводите дані (читаючи в модель перегляду або серіалізаційну модель) і потребуєте значень перед посиланнями, не робіть використовувати віртуальний; Якщо у вашому масштабі є збір даних, які можуть бути неповними або потребує пошуку, і не потрібен кожен параметр пошуку, виконаний для пошуку, код добре використає посилання, аналогічно використанню властивостей зведеного значення int? довго?. Крім того, абстрагування вашої бізнес-логіки від збору даних до її необхідності вводити її має багато переваг від продуктивності, подібно до інстанції об'єкта та запуску його на нулі. Entity Framework використовує багато роздумів і динаміки, які можуть погіршити продуктивність, а необхідність створення гнучкої моделі, яка може масштабувати попит, є критично важливою для управління продуктивністю.
Для мене це завжди мало більше сенсу, ніж використання перевантаженого технічного жаргону, як проксі, делегати, обробники тощо. Як тільки ви натиснете третій чи четвертий язик програмування, він може зіпсуватися з ними.