Почему Entityframework создает ненужный SQL-запрос из лямбда-выражения - PullRequest
0 голосов
/ 04 июня 2019

У меня есть 2 модели сущностей (Person и Group), и 2 модели объединены в одно свойство.Sql из linq создает левое соединение для этих моделей, но также создает другой запрос для группы.

public class Person
{
    public int Id;
    public string Name;
    public int GroupId;
    public Group Group;
    ...
}

public class Group
{
    public int Id;
    public string Name;
    ...
}

В конфигурации модели Person

builder.HasOne(x => x.Group).WithMany().HasForeignKey(x => x.GroupId)

Лямбда-выражение

return context.Include(x => x.Group)
.Select(x => new InternalPerson
{ Id = x.Id, Name = x.Name, Group = x.Group.Name})
.ToListAsync();

Когда я попробовал вышеуказанное выражение, он создал этот sql

SELECT [e].[Id], [e].[Name], [e].[Group], [e.Group].[Id], [e.Group].[Name]
FROM [Person] AS [e]
LEFT JOIN [Group] AS [e.Group] ON [e].[Group] = [e.Group].[Id]

Затем он также создал этот sql для каждого человека из приведенного выше результата.

SELECT [e.Group].[Id], [e.Group].[Name]
FROM [Group] AS [e.Group]

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

Даже если бы я попытался без включения, сгенерированный сценарий sql был таким же.

Когда я пытался без этого свойства выбрать

Group = x.Group.Name

, тогда дополнительные запросы не создавались.Я не знаю, какой смысл включать в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...