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

本文关键字:返回 实体 EF 查询 数据 使用 | 更新日期: 2023-09-27 18:06:24

我目前正在改变一个项目从LINQ到SQL到LINQ到实体。我有以下实体:

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

如果我对这个实体进行查询,我可以访问Customer,但是地址仍然是空的:

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到SQL中可以访问相关实体,我如何在LINQ到实体中存档?

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

[nkvu - moving as a answer by the original poster]同时强烈推荐@RAS对这个问题的回答,以解释不同的加载策略。

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

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