【发布时间】:2011-10-26 19:21:18
【问题描述】:
我正在使用 WCF Dataservice / EF 4.1 和 WPF 客户端应用程序。 这是我的问题以更简单的形式。假设我查询客户:
var query = (from o in ServiceRef.Clients.Expand("Addresses,PhoneNumbers,EmailAddresses")
where o.FirstName.ToLower().Contains(sf) ||
o.LastName.ToLower().Contains(sf) || ...
orderby o.LastName
select o).Take(100);
这就是我识别客户所需的全部内容。但是,我希望在第一次查询中看到评论、购买历史或其他未“扩展”的相关实体。如果我再次查询,使用相同的 ServiceRef 上下文,我将永远无法扩展“评论”。
我猜这与上下文有关,发现“客户端”实体已被跟踪,因此未针对服务执行新查询。
现在有些帖子说,永远不应该将 DBContext 保留那么长时间,我完全不同意这一点。这是一个简单的 Master/Details 场景。为每个“详细信息查询”创建一个新的上下文来获取额外的数据似乎是错误的。有没有办法强制 EF “重新加载”实体以获取额外数据?
当然,我可以在初始查询中扩展我曾经需要的每个附加实体。但随后我为每个搜索结果提供了大量数据。其中 95% 永远不会被使用。
要清楚。我要问的是更多“最佳实践”问题。中间有办法吗?在一直在扩展(...)所有数据之间 一直在创建新的上下文。?如果需要,有没有办法加载额外的数据。
谢谢,安德烈亚斯
【问题讨论】:
标签: wpf entity-framework wcf-data-services odata