Я пытаюсь сгенерировать запрос один ко многим, используя 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?