首先了解代码虚拟属性

嗨,我只是学习使用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 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 Enrollments { get; set; } } 

我的问题是我不明白虚拟的属性是什么。如果我检查数据库,每个属性都没有列包,只有其他属性。

那么当您使用virtual关键字创建属性时会发生什么?

它用于管理延迟加载更改跟踪

EF将在运行时生成代理类型,这些类型是从POCO类inheritance的动态生成类型,并添加所有EF内容以管理重写的虚拟属性中的延迟加载/更改跟踪。

因此virtual在这里不是一个“神奇的关键字”, virtual就在这里,所以你的POCO可以在运行时通过附加的EF相关代码inheritance。

虚拟属性允许延迟加载

当您创建使用virtual关键字标记的属性或方法时,您将被允许在派生类中覆盖它,从而根据您创建的对象为您的方法提供更专业的行为。

在Entity Framework的情况下,它也是一个指出使用延迟加载行为的约定。 这里存在一个关于此事的问题: entity framework4.1虚拟属性