Понимание первых виртуальных свойств кода
Привет, я просто учился работать с Entity Framework Code First, и я не могу что-то понять. Я создал три модели на основе учебника:
public class Course
{
public int CourseID { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public virtual ICollection<Enrollment> Enrollments{ get; set; }
}
public class Enrollment
{
public int EnrollmentID { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
public decimal? Grade { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
public class Student
{
public int StudentID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
Моя проблема заключается в том, что я не понимаю, какие свойства имеют виртуальные. Если я проверяю базу данных, для каждого из свойств нет ящика столбцов, только для остальных.
Итак, что происходит, когда вы создаете свойство с помощью ключевого слова virtual?
Ответы
Ответ 1
Он используется для управления ленивой загрузкой и отслеживанием изменений.
EF будет генерировать типы прокси во время выполнения, которые являются динамически генерируемыми типами, которые наследуются от ваших классов POCO и добавляют все элементы EF для управления ленивым отслеживанием загрузки/изменения в переопределенных виртуальных свойствах.
Таким образом, virtual
версия не является "волшебным ключевым словом" здесь, virtual
здесь, поэтому ваши POCOs могут быть унаследованы дополнительным кодом, связанным с EF, во время выполнения.
Ответ 2
Виртуальные свойства позволяют ленивую загрузку
Ответ 3
Когда вы создаете свойство или метод, помеченные ключевым словом virtual, вам будет разрешено переопределить его в производном классе, тем самым предлагая вашему методу более специализированное поведение в зависимости от создаваемых вами объектов.
В случае с Entity Framework это также соглашение, указывающее на то, что используется ленивое поведение загрузки. Вопрос по этому вопросу существует здесь: Entity Framework 4.1 Виртуальные свойства