[英]Entity Framework explicitly included navigation property is null
我有延迟加载过,并创建代理不要紧( 试用过真与假,没有区别)。
我有这个模型:
public class Comment{
[Required]
public int SenderID { get; set; }
public User Sender { get; set; }
}
(当然,我有一个用户类)。
在数据库级别,我确认发件人是有效的用户对象。 我有一个名为commentsQuery
IQueryable<Comment>
(基本上是从帖子中获取一些评论。然后,我包括Sender导航属性并执行查询:
var comments = commentsQuery.Take(50).OrderBy(c => c.ID).Include(c => c.Sender).ToList();
但是,即使我明确包含了导航属性,列表中的某些注释对象的Sender
设置为null。
如果我打开延迟加载,则可以正常工作,但是我不想打开延迟加载。
为什么显式包括的必需导航属性为null? (我正在使用Entity Framework 6.1.3)
好吧,自己弄清楚。 从数据库上下文构造发送者时,必须在原始查询中包括该发送者。
我正在使用:
var post = await Database.Posts.Where(p => p.ID == postId && p.Sender.Username == username).Include(p => p.Sender).Include(p => p.Comments).FirstOrDefaultAsync();
IQueryable<Comment> commentsQuery = post.Comments.ActiveObjects().OrderByDescending(c => c.ID).AsQueryable();
然后,我假设Entity Framework只是忽略了(我认为这是微软方面的设计问题)后来包含的导航属性( commentsQuery.[...].Include(c => c.Sender)
)。
我已经修改了原始查询,以包括第二级导航属性:
var post = await Database.Posts.Where(p => p.ID == postId && p.Sender.Username == username).Include(p => p.Sender).Include(p => p.Comments).Include(p => p.Comments.Select(c => c.Sender)).FirstOrDefaultAsync();
(注意添加了.Include(p => p.Comments.Select(c => c.Sender)
))
现在,我的查询工作正常。 无论如何,我不确定这是否是最好的方法,但这不是此问题的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.