2013-03-27 45 views
1

我目前正在將項目從LINQ更改爲SQL,更改爲LINQ to Entity。我有以下實體:使用EF查詢數據不會返回所有實體

Customer -> Address 

我通過WCF數據服務異步用此方法查詢我的數據庫:

public static async Task<IEnumerable<TResult>> ExecuteAsync<TResult>(this DataServiceQuery<TResult> query) 
{ 
    var queryTask = Task.Factory.FromAsync<IEnumerable<TResult>>(query.BeginExecute(null, null), (asResult) => 
    { 
     var result = query.EndExecute(asResult); 
     return result; 
    }); 

    return await queryTask; 
} 

如果我做這個實體的查詢,我可以訪問客戶,但地址仍爲空:

var query = (DataServiceQuery<Customer>)client.Customer.OrderBy(session => session.LastName); 
var data = await query.ExecuteAsync(); 
Test2.Text = data.LastName(); //returns the lastname 
Test2.Text = data.First().Address.Stret; //Address is Null 

我檢查了數據庫並且外鍵設置正確。爲什麼地址是空的?我必須以另一種方式查詢嗎?在LINQ to SQL中,可以訪問相關的實體,我如何將它歸檔到LINQ to Entity中?

+0

也許嘗試在構建查詢時對地址使用['Expand'](http://msdn.microsoft.com/en-us/library/ee358709.aspx)調用? – nkvu 2013-03-27 18:35:20

+0

謝謝,擴大作品。如果您發佈答案,我會將其標記爲已接受。 – 2013-03-27 18:56:33

回答

2

這一切都取決於你的模型。有三種方法:顯式加載,預先加載和延遲加載。對於急切的加載,你必須使用Include。或者您希望通過在您的媒體資源旁邊指定Virtual關鍵字來開啓延遲加載,併爲您的DataContext設置LazyLoadingEnabled = true。在這裏查看更多關於相關實體加載的信息:http://msdn.microsoft.com/en-us/data/jj574232.aspx

+0

對於解釋工藝的友好鏈接+1。在深度搜索中,我發現只有Egar使用Expand函數加載WCF數據服務。 – 2013-03-27 18:58:35