Как заставить отношение «многие ко многим» запрашиваться как OUTER JOIN в Entity FrameworkC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить отношение «многие ко многим» запрашиваться как OUTER JOIN в Entity Framework

Сообщение Anonymous »

У меня есть эта структура в SQL Server:
Изображение

Посмотрите на развернутые таблицы.

Код: Выделить всё

CampoAdicionalPorPersonaТаблица 
 — это таблица навигации между Persona и CampoAdicional (отношения многие-ко-многим).
Когда я выполняю этот запрос в EF.Core LINQ:

Код: Выделить всё

await db.Persona
.Include(p => p.CentroCosto)
.Include(p => p.Departamento)
.Include(p => p.Cargo)
.Include(p => p.CampoAdicionalPorPersona)
.FirstOrDefaultAsync(p => p.PersonaEliminadoEn == null && p.PersonaId == id);
Затем Entity Framework преобразует запрос в следующее:

Код: Выделить всё

SELECT [c1].[CampoId], [c1].[PersonaId], [c1].[CampoValorFecha], [c1].[CampoValorNumero], [c1].[CampoValorTexto], [c1].[ExtCiudadId], [c1].[OpcionId], [t].[PersonaId], [t].[CentroCostoId], [t].[DepartamentoId], [t].[CargoId]
FROM (
SELECT TOP(1) [p].[PersonaId], [c].[CentroCostoId], [d].[DepartamentoId], [c0].[CargoId]
FROM [Persona] AS [p]
LEFT JOIN [CentroCosto] AS [c] ON [p].[CentroCostoId] = [c].[CentroCostoId]
LEFT JOIN [Departamento] AS [d] ON [p].[DepartamentoId] = [d].[DepartamentoId]
LEFT JOIN [Cargo] AS [c0] ON [p].[CargoId] = [c0].[CargoId]
WHERE [p].[ExtEmpresaId] IN (
SELECT [a].[value]
FROM OPENJSON(@__allowed_0) WITH ([value] int '$') AS [a]
) AND [p].[PersonaEliminadoEn] IS NULL AND [p].[PersonaId] = @__id_1
) AS [t]
INNER JOIN [CampoAdicionalPorPersona] AS [c1] ON [t].[PersonaId] = [c1].[PersonaId]
ORDER BY [t].[PersonaId], [t].[CentroCostoId], [t].[DepartamentoId], [t].[CargoId]
Поскольку CampoAdicionalPorPersona представляет собой таблицу навигации (для отношений многие-ко-многим), почему она переводится как INNER JOIN вместо LEFT JOIN как другие отношения в запросе?

Код: Выделить всё

PersonalОбъект 
может иметь от 0 до нескольких CampoAdicionalPorPersona. Если элементов нет, результат запроса будет пустым.
Как это решить?

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-entity-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»