Linq query returns null when using the EF core relationship

Linq query returns null when using the EF core relationship

两个class定义如下:

class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}
class Post
{
     public int PostId { get; set; }
     public string Title { get; set; }
     public string Content { get; set; }

     public int BlogId { get; set; }
     public Blog Blog { get; set; }
}

并且在使用此 Linq 查询时:
var posts = context.Blog.FirstOrDefault(e => e.BlogId == 1).Posts.ToList();
抛出一个异常,表示值不能为空。 在结果视图中,博客的帖子列 Table 每行都是空的。

尝试重写查询 FirstOrDefault 导致查询数据库,因此可能无法加载关系

因此在查询前做投影:

var posts = context.Blog
                   .SelectMany(b => b.Posts)
                   .Where(p => p.BlogId == 1)
                   .ToList();

其他替代方法是使用 .Include()

var posts = context.Blog
                   .Include(b => b.Posts)
                   .FirstOrDefault(e => e.BlogId == 1)
                   ?.Posts;

最好在此处包含 select 子句。在查询中调用 FirstOrDefault() 将 return 查询的第一个结果或类型的默认值(在这种情况下很可能为 null)。 试试这个

var posts =
    (from e in context.Blog
    where e.BlogId == 1
    select e).FirstOrDefault();

由于没有延迟加载,您需要包含实体 Posts

var blog = context.Blog
                   .Include(b => b.Posts)
                   .FirstOrDefault(e => e.BlogId == 1);

当你在做 Firstordefault 时你需要检查 null

if(blog != null)
{
  ... do your work
}