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