我想知道什么时候我们使用关键词virtual和导航属性(我学会了延迟加载)但我正在阅读https://docs.asp.net/en/latest/data/ef-mvc/intro.html中创建asp.net的教程Web应用程序核心,他们不再使用该虚拟化。 我检查了旧版本(MVC4,MVC5)它始终存在但不在核心。 任何人都可以向我解释原因吗?
答案 0 :(得分:2)
您在实体上使用虚拟属性,因此Entity Framework可以在运行时创建一个继承自您的实体的代理类,并将存根注入到重写的属性中。当您从代码访问属性的getter时,此存根会执行数据库调用。
实体框架核心不支持延迟加载(但是,可能永远不会),因此没有理由将属性标记为虚拟。
另请参阅:官方文档中的Loading Related Data - Entity Framework Core 1.0.0 Documentation,GitHub上的Lazy Loading · Issue #3797 · aspnet/EntityFramework · GitHub和Stack Overflow上的Why use 'virtual' for class properties in Entity Framework model definitions?。