我记得在EF 导航属性应为virtual:
public class Blog { public int BlogId { get; set; } public string Name { get; set; } public string Url { get; set; } public string Tags { get; set; } public virtual ICollection<Post> Posts { get; set; } }
但是我看的是EF Core,但并不认为它是虚拟的:
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; } }
不再需要了吗?
virtual在EF 中从未 需要 。仅当您需要延迟加载支持时才需要它。
virtual
由于EF Core尚不支持延迟加载,因此目前 virtual没有特殊含义。他们将在何时(以及是否)添加延迟加载支持(有这样做的计划)。
更新: 从EF Core 2.1开始,现在支持延迟加载。但是,只要您不添加Microsoft.EntityFrameworkCore.Proxies包并通过启用它UseLazyLoadingProxies,原始答案仍然适用。
UseLazyLoadingProxies
但是,如果这样做,由于在最初的实现中缺少选择加入控件,情况将完全改变-它 要求 所有 导航属性 均为virtual。对我来说这是没有意义的,您最好在修复之前不要使用它。如果您确实需要延迟加载,请使用替代的不使用代理的延迟加载 方法,在这种情况下,virtual也不再重要。