Есть ли какая-либо выгода для пометки свойства Simple Entity как виртуального для Entity Framework CodeFirst 4.1 - PullRequest
1 голос
/ 08 февраля 2012

Я знаю, что могу использовать виртуальное ключевое слово, чтобы сообщить платформе сущности, что дочерняя таблица должна быть загружена LAZY способом. а,

public class Person
{
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
    public virtual History PastHistory { get; set; }
    public virtual ICollection<Blog> Blogs { get;set; }   
}

public class Blog
{
   ..... blah.. blah.... blah
}

public class History
{
   .... blah blah blah
}

Теперь мой вопрос,

  1. Поскольку история - это не коллекция, а отображение 1: 1 для другой сущности, я должен пометить историю как виртуальную, если я хочу загрузить историю ленивым способом?

  2. Есть ли какая-либо выгода для маркировки простых свойств (то есть имени: string, Age: int) как виртуальных? В этот момент я пометил все свои простые свойства как виртуальные без видимой причины. Если кто-нибудь подтвердит мне, что маркировка простых свойств как виртуальных не имеет никакого эффекта в EF Code First, я сниму отметки, чтобы сделать мой POCO более понятным.

Спасибо.

1 Ответ

4 голосов
/ 08 февраля 2012
  1. Если история все еще является связанной сущностью (запись из другой таблицы), вы также должны пометить ее как виртуальную, чтобы включить отложенную загрузку.Что еще более важно, если вы хотите использовать ленивую загрузку для блогов, все остальные свойства навигации в сущности также должны быть виртуальными.
  2. Пометка всех простых свойств виртуальными позволит EF использовать динамическое отслеживание изменений.

Ленивая загрузка и отслеживание изменений выполняется динамическим прокси-сервером - тип, созданный во время выполнения и полученный из вашего типа сущности.Виртуальное ключевое слово необходимо, чтобы этот производный тип переопределял (переносил) код вашего свойства в новый код, выполняя либо ленивую загрузку свойства навигации, либо информируя контекст EF об изменениях в простом свойстве.

...