具有 POCO 可序列化类和延迟加载的实体框架



我已经为相关对象设置了带有ICollection的POCO类。 它们在 WCF 服务中,因此我使用 DataContract/DataMember 对其进行了修饰。 我不对相关对象使用虚拟属性,因为它们创建了一个不会序列化的代理(我收到一条看似无关的消息,"底层连接已关闭",但是当我删除虚拟修饰符时,它消失了。

我无法理解的是如何延迟加载相关对象的集合。 我不认为 POCO 可以自己做到这一点,因为他们无法访问上下文。

例如,我有一个Company类,它有一个ICollection<Principals>属性。 我通常不想在检索公司时加载所有委托人,但我想参考Company.Principals来获取它们。 显然,Company自己根本无法做到这一点。

人们正在做什么来组合拥有 (1) POCO 对象、(2) 典型 WCF 序列化和 (3) 延迟加载相关属性的愿望?

延迟加载需要代理和虚拟导航属性。如果您没有代理,则必须以不同的方式处理加载。例如,通过使用预先加载:

var companies = context.Companies.Include("Principals").ToList();

或使用 EF 4.1

var companies = context.Companies.Include(c => c.Prinicpals).ToList();

您知道哪个操作也应该加载相关的主体,因此使用预先加载不是问题。在 WCF 服务中使用带有序列化的延迟加载将始终导致加载整个对象图。

最新更新