首先了解代码虚拟属性

时间:2013-03-06 12:39:31

标签: c# entity-framework entity-framework-4.1

您好我正在学习使用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; }
}

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

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

3 个答案:

答案 0 :(得分:34)

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

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

因此virtual不是“魔术关键字”,virtual就在这里,因此您的POCO可以在运行时使用其他与EF相关的代码继承。

答案 1 :(得分:6)

虚拟属性允许延迟加载

答案 2 :(得分:3)

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

在Entity Framework的情况下,它也是一个指出使用延迟加载行为的约定。关于此事的问题存在于此:Entity Framework 4.1 Virtual Properties