Почему виртуальное ключевое слово используется в модели C # master-detail? - PullRequest
6 голосов
/ 24 августа 2011

См. Статью EntityFramework и другие веб-семинары ASP MVC от Microsoft, такие как:

1: http://www.asp.net/mvc/videos/5-minute-introduction-to-aspnet-mvc

2: http://blogs.msdn.com/b/adonet/archive/2011/03/08/ef-feature-ctp5-code-first-model-with-master-detail-wpf-application.aspx

Они используют виртуальныеключевое слово для ссылки между основной и подробной моделями.

Не могли бы вы объяснить (1), почему они используют виртуальное ключевое слово, и (2) какие недостатки возникают без ключевого слова?

С уважением

1 Ответ

3 голосов
/ 24 августа 2011

Они указывают почему во второй ссылке:

При использовании типов сущностей POCO ленивая загрузка достигается путем создания экземпляров производных типов прокси во время выполнения и затем переопределения виртуальных свойствдобавить загрузочный крюк.Чтобы получить отложенную загрузку связанных объектов, необходимо объявить средства получения свойств навигации как общедоступные, виртуальные (переопределяемые в Visual Basic) и не запечатанные (неопределяемые в Visual Basic).В приведенном выше коде свойства навигации Category.Products и Product.Category являются виртуальными.

Единственный недостаток, который я могу видеть, заключается в том, что, как и любой виртуальный метод, они будут работать немного медленнее, чемне виртуальный метод.Скорее всего, вы никогда не сможете обнаружить разницу в производительности.

Вы увидите задержку при первом доступе к этим свойствам, поскольку отложенная загрузка подразумевает, что первое чтение приведет к запросу БД.

...