在导航属性上使用虚拟

时间:2016-10-13 13:16:10

标签: asp.net-core visual-studio-2015 asp.net-core-mvc entity-framework-core lazy-loading

我想知道什么时候我们使用关键词virtual和导航属性(我学会了延迟加载)但我正在阅读https://docs.asp.net/en/latest/data/ef-mvc/intro.html中创建asp.net的教程Web应用程序核心,他们不再使用该虚拟化。 我检查了旧版本(MVC4,MVC5)它始终存在但不在核心。 任何人都可以向我解释原因吗?

1 个答案:

答案 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?