使用EF查询数据不会返回所有实体

时间:2013-03-27 18:26:00

标签: c# windows entity-framework wcf-data-services

我目前正在将项目从LINQ更改为SQL到LINQ to Entity。我有以下实体:

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中存档?

2 个答案:

答案 0 :(得分:2)

这完全取决于您的型号。有三种方法:显式加载,预先加载和延迟加载。对于急切加载,您必须使用Include。或者,您希望通过在属性旁边指定Virtual关键字来启用延迟加载,并为LazyLoadingEnabled = true设置DataContext。在此处查看有关加载相关实体的更多信息:http://msdn.microsoft.com/en-us/data/jj574232.aspx

答案 1 :(得分:2)

[nkvu - 正如原始海报所示,作为答案移动。同时强烈推荐@ RAS对这个问题的回答,以解释不同的加载策略。]

也许尝试使用[Expand]( http://msdn.microsoft.com/en-us/library/ee358709.aspx)在构造查询以加载相关实体时调用Address。