是否应通过WCF服务预加载或延迟加载实体导航属性?

时间:2011-05-03 13:14:47

标签: wcf entity-framework-4 lazy-loading navigation-properties async-await

我们在WCF服务上使用自我跟踪实体。实体在没有加载导航属性的情况下返回到客户端。

最好一次发送所有导航属性,还是根据需要延迟加载它们?如果延迟加载,以异步方式加载它们是个好主意吗?到目前为止,我所有的WCF服务调用都使用了await / async关键字。

我有点担心一次加载它们,因为有些对象有很多导航属性并不总是使用。例如,消费者实体目前约有20个,预计会获得更多。一些示例包括地址,电话,文档和便笺。用户可以设置他们自己的工作区域,因此在加载消费者时,处理文档的人可能总是需要Documents属性,而大多数其他人不会。

1 个答案:

答案 0 :(得分:1)

这实际上取决于您使用实体的方式。最昂贵的将是往返服务,所以如果您有大多数情况下使用的导航属性,您可以急切加载它们,但对于偶尔使用的导航属性,您可以使用“延迟加载”。您的问题的真正答案只能通过对您的应用程序和性能测试的一些重要分析来提供。

我害怕的是你如何更新这种模型的方式。加载所有相关实体并从中创建一个对象图后,您是否可以将部分图表发送回服务?我希望你不能。

修改

我用“动态用户界面”阅读了你的另一个问题。因此,一旦用户启动应用程序,您可能知道应该显示哪些UI小部件。您可以公开一些初始方法,该方法将传递当前打开的窗口小部件所需的所有导航属性的描述,并在打开新窗口小部件时加载其他属性。简单地添加小部件将花费一些时间来获取数据。还可以自动包含一些较小的导航数据。