Ненужное «LEFT OUTER JOIN» в сгенерированном запросе в EF6 - PullRequest
1 голос
/ 11 марта 2020

Я вижу что-то странное в сгенерированном запросе после EF6. У меня есть ссылка один ко многим в базе данных (внешние ключи). Одна точка может иметь много получателей. И каждый получатель имеет ссылку на пользователя по идентификатору.

var allRecipientsQuery = context.Recipients.AsNoTracking()
                    .Include(x => x.User).AsNoTracking()
                    .Include(x => x.Point).AsNoTracking()
                    .Where(x => x.Point.Active == 1 && x.Point.Account.Timezone.utc == utc);
var allRecipients= allReportsQuery.ToList();

"ut c" - это переменная типа int. Но когда в Debug я попытался увидеть запрос, я получил его:

SELECT [Filter1].[pk_recipient_id] AS [pk_recipient_id], 
    [Filter1].[PointID] AS [PointID], 
    ...
 FROM   (SELECT [Extent1].[pk_recipient_id] AS [pk_recipient_id], [Extent1].[PointID] AS [PointID], ...
        FROM       [dbo].[Recipient] AS [Extent1]
        INNER JOIN [dbo].[Point] AS [Extent2] ON [Extent1].[PointID] = [Extent2].[PointID]
        INNER JOIN [iw].[Account] AS [Extent3] ON [Extent2].[fk_account_id] = [Extent3].[pk_account_id]
        INNER JOIN [iw].[Timezones] AS [Extent4] ON [Extent3].[fk_timezone_id] = [Extent4].[pk_timezone_id]
        INNER JOIN [iw].[Users] AS [Extent5] ON [Extent1].[UserId] = [Extent5].[pk_user_id]
        WHERE 1 = [Extent2].[Active] ) AS [Filter1]
    LEFT OUTER JOIN [dbo].[Point] AS [Extent6] ON [Filter1].[PointID] = [Extent6].[PointID]
    WHERE [Filter1].[utc] = @p__linq__0}

Я не понимаю, почему Entity Framework 6 добавляет «LEFT OUTER JOIN» в сгенерированный запрос, если у меня уже есть «INNER JOIN». Может кто-нибудь сказать, где я допустил ошибку?

Я использую. NET Framework 4.5.2 и Entity Framework 6.1.3.

...