一尘不染

导航属性应该是虚拟的-ef核心中不需要吗?

c#

我记得在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; }
    }

不再需要了吗?


阅读 375

收藏
2020-05-19

共1个答案

一尘不染

virtual在EF 中从未 需要 。仅当您需要延迟加载支持时才需要它。

由于EF Core尚不支持延迟加载,因此目前
virtual没有特殊含义。他们将在何时(以及是否)添加延迟加载支持(有这样做的计划)。

更新: 从EF Core 2.1开始,现在支持延迟加载。但是,只要您不添加Microsoft.EntityFrameworkCore.Proxies包并通过启用它UseLazyLoadingProxies,原始答案仍然适用。

但是,如果这样做,由于在最初的实现中缺少选择加入控件,情况将完全改变-它 要求 所有 导航属性
均为virtual。对我来说这是没有意义的,您最好在修复之前不要使用它。如果您确实需要延迟加载,请使用替代的不使用代理的延迟加载
方法,在这种情况下,virtual也不再重要。

2020-05-19