2013-03-27 49 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