我有两个表:用户和下面的代币。
现在我使用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();
}
}
答案 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);
}