【问题标题】:Why virtual keyword is used in C# master-detail model?为什么在 C# 主从模型中使用 virtual 关键字?
【发布时间】:2011-08-24 03:02:54
【问题描述】:

请参阅 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

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

您能否解释一下(1)他们为什么使用 virtual 关键字以及(2)没有关键字会出现什么缺点?

问候

【问题讨论】:

    标签: c# model virtual keyword master-detail


    【解决方案1】:

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

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

    我能看到的唯一缺点是,与任何虚拟方法一样,这些方法的执行速度会比非虚拟方法稍慢。您可能永远无法检测到性能差异。

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

    【讨论】:

    • 感谢您的回答。还有一个问题,如果我不需要 POCO 支持或延迟加载,是否仍然推荐?
    • 它当然不应该伤害任何东西,但不,我认为不需要它。
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多