1

我目前正在将项目从 LINQ 更改为 SQL 到 LINQ 到 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 中存档?

4

2 回答 2

2

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

于 2013-03-27T18:33:20.010 回答
2

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

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

于 2013-03-27T19:02:30.273 回答