Каким образом Include / ThenInclude в EF Core 3.1 преобразуется как внутреннее соединение - PullRequest
1 голос
/ 10 февраля 2020

Я использую EF Core 3.1. Я хочу, чтобы Include () и ThenInclude производили Внутреннее соединение Но они производят левое соединение. Я использую Code-First подход. Ниже приведен пример моей модели

public class Employee
    {
        [Key]
        public int Id { get; set; }

        public string Name { get; set; }

        public string Gender { get; set; }

        public string Img1 { get; set; }

        public virtual EmployeeDepartment EmployeeDepartment { get; set; }
    }

And
    public class EmployeeDepartment
    {       
        public int DeptID { get; set; }

        [ForeignKey("Employee")]
        [Required]
        public int Id { get; set; }

        public string DeptName { get; set; }

        public virtual Employee Employee { get; set; }
    }

Ниже приводится запрос linq

var result= context.Employees.Include(dept => dept.EmployeeDepartment).ToList();

, который выдает запрос ниже Sql в окне O / P

SELECT [dept].[Id], [dept].[Gender], [dept].[Img1], [dept].[Name], [dept.EmployeeDepartment].[Id], [dept.EmployeeDepartment].[DeptID], [dept.EmployeeDepartment].[DeptName]
FROM [Employees] AS [dept]
**LEFT JOIN** [EmployeeDepartment] AS [dept.EmployeeDepartment] ON [dept].[Id] = [dept.EmployeeDepartment].[Id]

I хотите, чтобы было произведено внутреннее соединение. Любые предложения приветствуются.

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете попробовать изменить порядок запроса (например, child -> parent):

var result= _context.EmployeeDepartments.Include(dept => dept.Employee).ToList();

Однако это добавляет дополнительные умственные издержки и может оказаться не тем, что вы ищете. Если ваши отношения требуются в вашей доменной модели, я бы предложил придерживаться вашего запроса, это не должно влиять на производительность, потому что левое и внутреннее объединение в этом случае даст одинаковый результат.

PS: Для класса EmployeeDepartment вы настроил Id как первичный ключ (по соглашению) и внешний ключ (с аннотацией данных). Свойство DeptID не используется (я полагаю, это был PK).

...