Службы данных WCF, Entity Framework, LINQ -> Дети среди детей - PullRequest
1 голос
/ 30 марта 2012

Я не могу получить доступ к родительскому ребёнку ребёнку ребёнку.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 раз со здания на сайт.Но это кажется слишком сложным для того, что я пытаюсь сделать.

Я предполагаю, что я хочу быть в состоянии развернуть все дочерние элементы в 1 запросе.1012 *

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Итак, вот что я нашел:

Во-первых, службы данных 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 расширения расширение 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
0 голосов
/ 30 марта 2012

Вам определенно стоит взглянуть на механизмы загрузки LINQ и Entity Framework - я полагаю, вы столкнулись с «проблемой» отложенной загрузки.Для справочного визита http://msdn.microsoft.com/en-us/library/bb896272.aspx

Привет,

...