EF如何将子对象包含在查询中

时间:2014-02-08 14:56:04

标签: c# .net sql-server entity-framework orm

我有两个表:用户和下面的代币。

enter image description here

现在我使用EF编写查询,它采用Token对象,但Token对象内的子对象User为null。我应该如何修改我的查询以使用User对象获取Token?

using (var db = new AccountDbContext())
{
    Token tok = db.Tokens
       .FirstOrDefault(p => tokenValue == p.Value) == 0);

    if (tok.User == null)
    {
        //I'm there, but I 100% of sure thata this relation exists
        throw new Exception();
    }
}

1 个答案:

答案 0 :(得分:1)

实体框架不会自动将所有相关对象加载到数据库之外 - 如果有许多表关系很多,这可能会非常昂贵。您需要告诉EF在查询中加载关联的User(这称为Eager Loading),或者您需要启用延迟加载,以便EF在首次访问时加载它。 (有关详细信息,请参阅MSDN文章Loading Related Entities

以下是Eager Loading的示例(未经过全面测试,因为我没有您的模型):

using (var db = new AccountDbContext())
{
    Token tok = db.Tokens.Include(n => n.User)
       .FirstOrDefault(p => tokenValue == p.Value) == 0);
}