EF如何包含要查询的子对象
Posted
技术标签:
【中文标题】EF如何包含要查询的子对象【英文标题】:EF how to include subobject to query 【发布时间】:2014-02-08 14:56:04 【问题描述】:我有两个表:用户和令牌,如下所示。
现在我使用 EF 编写查询,它采用 Token 对象,但 Token 对象中的子对象 User 为空。我应该如何修改我的查询以获取带有用户对象的令牌?
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();
【问题讨论】:
您返回的对象应该具有user
对象,例如tokenObj.User
!如果关系存在
@sarwar026:请看我更新的代码。
我明白了。但是不明白为什么是null
如果有关系!
你可能会看到***.com/questions/21065177/…问题的答案
【参考方案1】:
实体框架不会自动将所有相关对象从数据库中加载出来——如果有很多表和很多关系,这可能会非常昂贵。您要么需要告诉 EF 在查询中加载关联的User
(这称为急切加载),要么需要启用延迟加载,以便 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);
【讨论】:
以上是关于EF如何包含要查询的子对象的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PostgreSQL 的子查询中选择包含值数组的列?