[翻译] - <Entity Framewrok> - 创建 POCO 代理需满足的条件

纯属学习上的记录, 非专业翻译, 如有错误欢迎指正!

原文地址: http://msdn.microsoft.com/en-us/library/gg715126(v=vs.103)

 

如果你想启用 POCO 实体的延迟加载功能, 同时也想 EF 对你的实体对象的改变进行跟踪, 那么你的 POCO 类必须满足本节所介绍的要求, 如此 EF 才能在程序运行的时候为你的 POCO 实体创建代理. 代理类将继承于你的 POCO 类.

类的定义要求

如果 POCO 实体类满足以下要求, EF 便可以为他们创建代理. POCO 实体类的代理可以帮它们实现延迟加载功能和变化跟踪功能. 你可以拥有延迟加载代理而不必满足变化跟踪代理的创建要求, 但如果你满足了变化跟踪代理的创建要求, 延迟加载代理也会被创建. 你可以通过将 LazyLoadingEnabled 属性设为 false 来禁用延迟加载功能.

创建两种代理都必须满足的要求:

  • 实体类必须用 public 访问修饰符声明;
  • 实体类不能声明为 sealed (在 Visual Basic 中则为 NotInheritable);
  • 实体类不能声明为 abstract (在 Visual Basic 中则为 MustInherit);
  • 实体类必须有一个 publicprotected 的无参构造函数;
  • ProxyCreationEnabled 属性必须设置为 true;

创建延迟加载代理:

  • 实体类中的每个导航属性都有一个可继承(即非 sealed)(在 Visual Basic 中为 NorOverridable), publicvirtual (在 Visual Basic 中为 Overridable) 的 get 访问器.;

创建变化跟踪代理:

  • 实体类中的每个导航属性都有一个可继承(即非 sealed)(在 Visual Basic 中为 NorOverridable), publicvirtual (在 Visual Basic 中为 Overridable) 的 get 访问器;
  • 代表一个关系中的 "多" 的导航属性, 必须返回实现了 T 类型的 System.Collections.Generic.ICollection 接口的对象. 其中的 T 为关系上的实体对象的类型;
  • 如果你想用你的对象单独创建一个代理类, 可以用 System.Data.Entity.DbSet.Create 方法来创建对象, 而不是用 new 操作;

转载于:https://www.cnblogs.com/mend/archive/2012/06/06/2538766.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值