2012-03-29 18 views
1

Ich kann nicht scheinen, Elternteil Kind Kind Kind zugreifen. IE. WorkOrder hat 1 Einheit, die 1 Gebäude hat, das 1 Standort hatWCF Data Services, Entity Framework, LINQ -> Kinder in Kindern

Ich war in der Lage, die Einheit eifrig zu laden, aber ich kann nicht scheinen, irgendein "tieferes" zu bekommen.

Code:

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) 

In der Theorie der Workorder Einheit kann ich eifrig Last, das gleiche mit Einheit/Gebäuden und dann 1 mehr Zeit mit dem Bau zu Standort. Aber das scheint weit übertrieben zu sein für das, was ich versuche zu tun.

Ich denke, was ich will, ist in der Lage, alle Kinder in 1 Abfrage zu erweitern.

Irgendwelche Gedanken?

Antwort

3

Also hier ist was ich gefunden habe:

First off, WCF Data Services nicht unterstützt verzögertes Ladenproof. Das bedeutet, dass dieser Code wird nie funktionieren:

var workOrder = context.WorkOrders.First(); 
string siteId = workOrder.Unit.Building.Site.Id.ToString(); // won't work w/ WCF Data Services 

Dann dachte ich, ich könnte wie unten beitreten verwenden, jedoch WCF Data Services unterstützt nicht beitrittproof:

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

schließlich nach der Einnahme ein Blick auf die OData Spezifikation von oData expand erweitern konnte ich feststellen, dass meine ursprüngliche Nutzung SCHLIEßEN erweitern war, was ich wollte, das funktioniert:

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 
Verwandte Themen