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

时间:2012-06-13 22:50:23

标签: wcf entity-framework-4 poco

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

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

例如,我有一个Company类,它具有ICollection<Principals>属性。我通常不希望在检索公司时加载所有Principal,但我希望引用Company.Principals来获取它们。很明显,Company根本无法自行完成。

人们正在做些什么来组合欲望(1)POCO对象,(2)典型的WCF序列化,以及(3)延迟加载的相关属性?

1 个答案:

答案 0 :(得分:0)

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

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

或使用EF 4.1

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

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