首先理解代码中的虚拟属性
本文关键字:虚拟 属性 代码 | 更新日期: 2023-09-27 18:02:26
嗨,我只是学习与实体框架代码第一工作,我似乎不能理解的东西。我根据教程创建了三个模型:
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的属性是做什么的。如果我检查数据库,没有每个属性的列箱,只有其他属性的列箱。
那么当你用virtual关键字创建属性时会发生什么呢?
用于管理延迟加载和更改跟踪。
EF将在运行时生成代理类型,这是动态生成的类型,继承你的POCO类,并添加所有EF的东西来管理延迟加载/更改跟踪在覆盖的虚拟属性。
所以virtual
在这里不是一个"魔法关键字",virtual
在这里,所以你的poco可以在运行时继承额外的ef相关代码。
虚拟属性允许延迟加载
当你创建一个标有virtual关键字的属性或方法时,你将被允许在派生类中重写它,从而根据你创建的对象为你的方法提供更专门的行为。
在实体框架的情况下,它也是一个约定,指出使用延迟加载行为。关于这个问题存在一个问题:实体框架4.1虚拟属性