2012-03-29 8 views
1

親の子の子供にアクセスできないようです。 IE。 WorkOrderには1つのユニットがあり、1つのビルディングには1つのサイトがありますWCFデータサービス、エンティティフレームワーク、LINQ - >子どもの中の子供

私はこのユニットを熱心にロードできましたが、私は「深い」ものを得ることはできません。

コード:私は熱心な負荷WorkOrderはユニットは、ユニット/建物と同じことを行うと、サイトへの建物で、その後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) 

。しかし、それは私がやろうとしていることのために外に出ているようです。

私は1つのクエリのすべての子を展開することができるようにしたいと思う。

どのような考えですか?

答えて

3

は、私が見つけた何のために:

まずオフ、WCF Data Servicesのは遅延ロードproofをサポートしていません。

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

は、その後、私は、私は以下のような参加を使うと考えていた、しかしWCF Data Servicesはサポートしていません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私の元の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 
関連する問題