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

发布于 2024-12-01 05:50:25 字数 588 浏览 1 评论 0原文

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

1:http://www.asp.net/mvc/videos/5- 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)如果不使用该关键字会出现哪些缺点?

问候

Refer to the EntityFramework article, and other ASP MVC webinars from Microsoft such as;

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

They use virtual keyword to reference between master and detail models.

Could you explain (1) why they use virtual keyword and (2) what drawbacks occur without the keyword?

Regards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你是我的挚爱i 2024-12-08 05:50:25

他们在您的第二个链接中指定了原因

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

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

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

They specify why in your second link:

When using POCO entity types, lazy loading is achieved by creating instances of derived proxy types during runtime and then overriding virtual properties to add the loading hook. To get lazy loading of related objects, you must declare navigation property getters as public, virtual (Overridable in Visual Basic), and not sealed (NotOverridable in Visual Basic). In the code above, the Category.Products and Product.Category navigation properties are virtual.

The only downside I can see is that, like any virtual method, these will perform ever so slightly slower than a non-virtual method. Chances are you will never be able to detect the performance difference.

You will see a delay in the first access of these properties, as lazy loading implies that the first read will result in a DB query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文