2013-03-06 4 views
24

Привет Я только учусь работать с Entity Framework Code First, и я не могу понять something.I создали три модели, основанные на учебнике:Понимание кода Первые виртуальные свойства

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?

ответ

31

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

EF будет генерировать типы прокси-сервера на время выполнения, которые динамически генерируемые типы, которые наследоваться от POCO классов и добавить все EF вещи, чтобы управлять отложенной загрузки/отслеживания изменений в перекрытых виртуальных свойств.

Так что virtual не является «магическим ключевым словом» здесь, virtual здесь, поэтому ваши POCOs могут быть унаследованы дополнительным кодом, связанным с EF, во время выполнения.

3

При создании свойства или метода, помеченных ключевым словом virtual, вам будет разрешено переопределить его в производном классе, тем самым предлагая вашему методу более специализированное поведение в зависимости от создаваемых объектов.

В случае с платформой Entity Framework это также соглашение, указывающее на то, что используется ленивое поведение загрузки. Вопрос по этому вопросу существует здесь: Entity Framework 4.1 Virtual Properties

+2

При работе с Entity Framework существует гораздо больше. Это, например, необходимо для ленивого механизма загрузки для Entity Framework. См.: http://stackoverflow.com/questions/7738722/entity-framework-4-1-virtual-properties –

+0

@Ravadre Спасибо, обновил мой пост. – Freeman

5

Виртуальных свойств есть, чтобы отложенная загрузка