在 Code First 和 Entity Framework 教程中,我发现了不同的示例,展示了该属性virtual
在不同模型中的使用。
例子:
public class Student {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public ICollection<Enrollment> Enrollments { get; set; }
}
另一个例子:
public class Album {
public virtual int AlbumId { get; set; }
public virtual int GenreId { get; set; }
public virtual int ArtistId { get; set; }
public virtual string Title { get; set; }
public virtual decimal Price { get; set; }
public virtual string AlbumArtUrl { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
所以我的问题是以下,该属性的用途是什么virtual
以及何时使用它?
virtual
允许一个属性和方法被继承自它的类覆盖。我使用它的情况更多的是当我需要修改类的默认行为时,例如,在获取名称时,我将其转换为大写,因为主类没有。
使用虚拟时,您正在使用LazyLoading并且将加载关系实体,同时,如果您不使用虚拟,您正在使用急切加载,为了访问导航属性,您必须使用Inclide()方法
急切加载示例:
当您需要一些导航属性时,您必须使用 Include()。