我已经为相关对象设置了ICollection的POCO类。它们位于WCF服务中,因此我使用DataContract / DataMember对它们进行了装饰。我没有对相关对象使用虚拟属性,因为它们创建了一个不会序列化的代理(我得到一条看似无关的消息,“底层连接已关闭”,但是当我删除虚拟修改器时,它就会消失。)
我无法理解的是如何延迟加载相关对象的集合。我不认为POCO可以为自己做到这一点,因为他们无法访问上下文。
例如,我有一个Company
类,它具有ICollection<Principals>
属性。我通常不希望在检索公司时加载所有Principal,但我希望引用Company.Principals
来获取它们。很明显,Company
根本无法自行完成。
人们正在做些什么来组合欲望(1)POCO对象,(2)典型的WCF序列化,以及(3)延迟加载的相关属性?
答案 0 :(得分:0)
延迟加载需要代理和虚拟导航属性。如果您没有代理,则必须以不同方式处理加载。例如,通过使用预先加载:
var companies = context.Companies.Include("Principals").ToList();
或使用EF 4.1
var companies = context.Companies.Include(c => c.Prinicpals).ToList();
您知道哪个操作也应该加载相关的主体,因此使用预先加载不是问题。在序列化的WCF服务中使用延迟加载将始终导致加载整个对象图。