WCF数据服务,实体框架,LINQ - >儿童中的儿童

时间:2012-03-29 23:53:13

标签: c# wcf wcf-data-services

我似乎无法访问父母子女。 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个查询中扩展所有孩子。

有什么想法吗?

2 个答案:

答案 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

问候,

相关问题