实体框架代理创建

时间:2011-06-01 08:53:25

标签: c# entity-framework-4.1

我们可以使用

停止在上下文构造函数中创建代理
this.Configuration.ProxyCreationEnabled = false;

在EF 4.1中创建代理有哪些优点和缺点?

2 个答案:

答案 0 :(得分:17)

代理是两个功能所必需的:

  • 延迟加载 - 第一次访问时加载导航属性
  • 动态更改跟踪 - 如果您修改实体中的任何属性,则会向上下文通知此更改并设置实体的状态。如果未使用动态更改跟踪,则上下文必须使用快照更改跟踪,这意味着在保存之前发现所有更改=浏览所有属性,即使它们未被更改。

这两种技术都有其他要求:

  • 延迟加载 - 实体中的所有导航属性必须为virtual。必须启用延迟加载。
  • 动态更改跟踪 - 所有映射的属性必须为virtual

答案 1 :(得分:2)

除了上一个答案,Runtime使用反射使用您的POCO类,并创建继承您的POCO类的动态代理类。因此,它将在运行时添加这些功能+ EntityObject功能,这将有助于动态代理启用延迟加载和动态更改跟踪。