您的位置:首页 > 其它

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

2012-06-06 20:39 246 查看
纯属学习上的记录, 非专业翻译, 如有错误欢迎指正!

原文地址: 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 操作;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: