为什么在C#主从模型中使用虚拟关键字?

时间:2011-08-24 03:02:55

标签: c# model virtual keyword master-detail

请参阅EntityFramework文章以及Microsoft的其他ASP MVC网络研讨会,例如;

1:http://www.asp.net/mvc/videos/5-minute-introduction-to-aspnet-mvc

2:http://blogs.msdn.com/b/adonet/archive/2011/03/08/ef-feature-ctp5-code-first-model-with-master-detail-wpf-application.aspx

他们使用虚拟关键字在主模型和详细模型之间进行引用。

你能否解释(1)为什么他们使用虚拟关键字?(2)没有关键字会出现什么缺点?

此致

1 个答案:

答案 0 :(得分:3)

他们在第二个链接中指定为什么

  

使用POCO实体类型时,通过在运行时创建派生代理类型的实例,然后覆盖虚拟属性以添加加载挂钩来实现延迟加载。要延迟加载相关对象,必须将导航属性getter声明为public,virtual(在Visual Basic中为可覆盖),而不是密封(在Visual Basic中为NotOverridable)。在上面的代码中,Category.Products和Product.Category导航属性是虚拟的。

我能看到的唯一不足之处在于,与任何虚拟方法一样,这些方法的执行速度比非虚方法稍慢。您可能永远无法检测到性能差异。

您将看到第一次访问这些属性时出现延迟,因为延迟加载意味着第一次读取将导致数据库查询。