EF Core 2.2 проблема, связанная с загрузкой данных, связанных со свойствами навигации

#entity-framework-core #ef-core-2.2

#entity-framework-core #ef-core-2.2

Вопрос:

я использую EF core 2.2 с Postgresql и подходом code first. это мои классы:

 public class SchoolContext : DbContext
{
    public SchoolContext(DbContextOptions options) : base(options)
    {
    }

    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

}

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

    public ICollection<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }

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

я вижу DDL в postgresql, и это выглядит нормально.
Проблема заключается в запросе этих данных.
Я хочу использовать быструю загрузку, и этот запрос не выдает результатов со связанными данными:

         this._context.Blogs
            .Include(blog => blog.Posts)
            .ToList();


SELECT blog."BlogId", blog."Url"
  FROM "Blogs" AS blog
  ORDER BY blog."BlogId"
  

РЕДАКТИРОВАТЬ: этот запрос выполняется первым. Если записей нет, на этом все заканчивается, но если есть какие-то записи, то выполняется следующий запрос:

 SELECT "blog.Posts"."PostId", "blog.Posts"."BlogId", "blog.Posts"."Title"
  FROM "Posts" AS "blog.Posts"
  INNER JOIN (
      SELECT blog0."BlogId"
      FROM "Blogs" AS blog0
  ) AS t ON "blog.Posts"."BlogId" = t."BlogId"
  ORDER BY t."BlogId"
  

Если я сделаю это наоборот, я получу правильную информацию, но сбивает с толку то, что я не могу получить блог со всеми связанными публикациями.

 this._context.Posts
            .Include(post => post.Blog)
            .ToList();

  SELECT post."PostId", post."BlogId", post."Title", "post.Blog"."BlogId", "post.Blog"."Url"
  FROM "Posts" AS post
  INNER JOIN "Blogs" AS "post.Blog" ON post."BlogId" = "post.Blog"."BlogId"
  

Комментарии:

1. Почему вы думаете, что это не работает? Вы действительно проверили результирующий набор? При загрузке EF Core в качестве EF6 не используется единый SQL.

2. @IvanStoev я отредактировал свой вопрос. Дело в том, что это работает в том смысле, что я получаю правильные данные, но я не ожидал двух запросов.

3. Так работают запросы EF Core . Примечание 2.c «В базу данных отправляется один или несколько запросов …»