Entity Framework - Почему EF использует LEFT OUTER JOIN в соотношении 1: 1? - PullRequest
6 голосов
/ 17 марта 2010

Почему .NET Entity Framework создает SQL, который использует подзапрос и левое внешнее объединение в простых отношениях 1-к-1? Я ожидал увидеть простое соединение двух таблиц. Я использую Devart Dotconnect для Oracle . Есть идеи?

Ниже приведен вывод, любезно предоставленный EFTracingProvider :

SELECT
1 AS C1,
"Join1".USER_ID1 AS USER_ID,
...
FROM  "MY$NAMESPACE".MYTABLE1 "Extent1"
INNER JOIN  (...
    FROM  "MY$NAMESPACE".MYTABLE2 "Extent2"
    LEFT OUTER JOIN "MY$NAMESPACE".MYTABLE1 "Extent3" ON "Extent2".OTHER_ID = "Extent3".OTHER_ID ) 
    "Join1" ON "Extent1".OTHER_ID = "Join1".OTHER_ID1
WHERE "Extent1".USER_ID = :EntityKeyValue1
-- EntityKeyValue1 (dbtype=String, size=6, direction=Input) = "000000"

1 Ответ

0 голосов
/ 26 сентября 2013

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

...