Почему Entity Framework Core генерирует LEFT JOIN? - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь сгенерировать запрос один ко многим, используя INNER JOIN, как обычно в SQL. Я упростил модель и запрос, чтобы легче объяснить проблему.

Я определил это отношение как отношение один ко многим, которое является обязательным, но даже с этим простым утверждением я не могу его получить сгенерировать INNER JOIN. Я не хочу LEFT JOIN здесь или ORDER BY предложение, которое по какой-то причине добавило EF. Может кто-нибудь, пожалуйста, помогите?

modelBuilder.Entity<Author>()
    .HasKey(x => x.Id);

modelBuilder.Entity<Author>()
    .HasMany(x => x.Books)            
    .WithOne(x => x.Author)
    .HasForeignKey(x => x.AuthorId)
    .IsRequired();

modelBuilder.Entity<Book>()
    .HasKey(x => x.Id);

modelBuilder.Entity<Book>()
    .HasOne(x => x.Author)
    .WithMany(x => x.Books)
    .HasForeignKey(x => x.AuthorId)
    .IsRequired();
public class Author
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Book> Books { get; set; }
}

public class Book
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int AuthorId { get; set; }
    public Author Author { get; set; }
}
var results = Context.Authors.Include(x => x.Books).ToList();

Затем будет сгенерировано следующее SQL:

SELECT [f].[Id], [f].[Name], [f0].[Id], [f0].[Name]
FROM [Author] AS [f]
LEFT JOIN [Book] AS [f0] ON [f].[Id] = [f0].[AuthorId]
ORDER BY [f].[Id], [f0].[Id]

Почему Entity Framework добавляет предложение ORDER BY, когда Я не указал это? И почему он генерирует LEFT JOIN, когда мои отношения заданы так, как требуется в свободной конфигурации API?

...