请参阅EntityFramework文章以及Microsoft的其他ASP MVC网络研讨会,例如;
1:http://www.asp.net/mvc/videos/5-minute-introduction-to-aspnet-mvc
他们使用虚拟关键字在主模型和详细模型之间进行引用。
你能否解释(1)为什么他们使用虚拟关键字?(2)没有关键字会出现什么缺点?
此致
答案 0 :(得分:3)
他们在第二个链接中指定为什么:
使用POCO实体类型时,通过在运行时创建派生代理类型的实例,然后覆盖虚拟属性以添加加载挂钩来实现延迟加载。要延迟加载相关对象,必须将导航属性getter声明为public,virtual(在Visual Basic中为可覆盖),而不是密封(在Visual Basic中为NotOverridable)。在上面的代码中,Category.Products和Product.Category导航属性是虚拟的。
我能看到的唯一不足之处在于,与任何虚拟方法一样,这些方法的执行速度比非虚方法稍慢。您可能永远无法检测到性能差异。
您将看到第一次访问这些属性时出现延迟,因为延迟加载意味着第一次读取将导致数据库查询。