一尘不染

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生什么影响?

virtual

virtual关键字在 EF Code First 中的属性上使用时是否有效?有人可以描述它在不同情况下的所有后果吗?

例如,我知道它可以控制延迟加载——如果您在 ICollection/一对多关系属性上使用 virtual 关键字,默认情况下它将延迟加载,而如果您不使用 virtual 关键字,它将急切地加载。

virtual关键字在带有 POCO 实体的 EF 中还有哪些其他影响?我应该让它默认使用virtual我的所有属性,还是默认不使用它?


阅读 172

收藏
2022-05-19

共1个答案

一尘不染

到目前为止,我知道这些影响。

  • 延迟加载:任何virtualICollections 都将被延迟加载,除非您特别标记它们。

  • 更有效的变更跟踪。如果您满足以下所有要求,那么您的更改跟踪可以通过挂钩您的虚拟属性来使用更有效的方法。从链接:

要获得更改跟踪代理,基本规则是您的类必须是公开的、非抽象的或非密封的。您的类还必须为所有持久化的属性实现公共虚拟 getter/setter。最后,您必须将基于集合的关系导航属性声明为ICollection<T>only。它们不能是具体实现或派生自ICollection<T>(与延迟加载代理不同)的另一个接口

2022-05-19