我似乎无法访问父母子女。 IE浏览器。 WorkOrder有1个单位,有1个建筑物,有1个站点
我已经能够加载装置,但我似乎无法获得任何“更深层次”。
代码:
int workOrderId = 1;
var workOrder = context.WorkOrders.Expand("Unit").Where(w => w.Id == workOrderId).First();
string siteId = workOrder.Unit.Building.Site.Id.ToString(); // kaboom (null)
理论上,我可以急切地加载WorkOrder单元,对单元/建筑物进行相同的操作,然后再进行一次建筑到站点的操作。但这似乎是我想要做的事情的过分。
我想我想要做的就是在1个查询中扩展所有孩子。
有什么想法吗?
答案 0 :(得分:3)
所以这就是我发现的:
首先,WCF数据服务不支持延迟加载 proof。这意味着此代码永远不会起作用:
var workOrder = context.WorkOrders.First();
string siteId = workOrder.Unit.Building.Site.Id.ToString(); // won't work w/ WCF Data Services
然后我想我可以使用下面的连接,但 WCF数据服务不支持连接 proof:
var query =
from wo in context.WorkOrders
join unit in context.Units on wo.Id equals unit.Id
join building in context.Buildings on unit.Id equals building.Id
join site in context.Sites on building.Id equals site.Id
where wo.Id == workOrderId
select new
{
SiteId = site.Id,
};
最后,在看了展开oData expand的oData规范后,我发现我的原始展开使用情况已接近我想要的效果,此作品:
int workOrderId = 1;
var workOrder = context.WorkOrders.Expand("Unit/Building/Site").Where(w => w.Id == workOrderId).First();
string siteId = workOrder.Unit.Building.Site.Id.ToString(); // shows site id
答案 1 :(得分:0)
你肯定应该看看LINQ和实体框架的加载机制 - 我猜你正在遇到一个延迟加载“问题”。如需参考,请访问http://msdn.microsoft.com/en-us/library/bb896272.aspx
问候,