2

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

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

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

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

4

1 回答 1

0

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

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

或使用 EF 4.1

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

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

于 2012-06-14T08:24:25.047 回答