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

C# WCF数据服务,实体框架,LINQ->;儿童中的儿童,c#,wcf,wcf-data-services,C#,Wcf,Wcf Data Services,我似乎无法访问父项和子项。即:工单有1个单元,其中有1个建筑,其中有1个场地 我已经能够迫不及待地加载该单元,但我似乎无法再“深入”下去 代码: 理论上,我可以立即加载WorkOrder单元,对单元/建筑执行相同的操作,然后对建筑到现场再执行一次。但这对我所要做的似乎太过分了 我想我想要做的是在一个查询中展开所有的子项 有什么想法吗?您肯定应该看看LINQ和实体框架的加载机制——我想您遇到了延迟加载的“问题”。参考访问 您好,以下是我的发现: 首先,WCF数据服务不支持延迟加载。这意味着此代码永

我似乎无法访问父项和子项。即:工单有1个单元,其中有1个建筑,其中有1个场地

我已经能够迫不及待地加载该单元,但我似乎无法再“深入”下去

代码:

理论上,我可以立即加载WorkOrder单元,对单元/建筑执行相同的操作,然后对建筑到现场再执行一次。但这对我所要做的似乎太过分了

我想我想要做的是在一个查询中展开所有的子项


有什么想法吗?

您肯定应该看看LINQ和实体框架的加载机制——我想您遇到了延迟加载的“问题”。参考访问


您好,

以下是我的发现:

首先,WCF数据服务不支持延迟加载。这意味着此代码永远不会工作:

var workOrder = context.WorkOrders.First();
string siteId = workOrder.Unit.Building.Site.Id.ToString(); // won't work w/ WCF Data Services
然后我想我可以使用下面这样的连接,但是WCF Data Services不支持连接:

最后,在查看了expand的oData规范后,我发现我最初的expand用法与我想要的非常接近,这很有效

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
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,
    };
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