2010-03-17 22 views
6

¿Por qué .NET Entity Framework produce SQL que usa una subconsulta y una combinación externa izquierda en una relación simple de 1 a 1? Esperaba ver una simple unión en las dos mesas. Estoy usando Devart Dotconnect for Oracle. ¿Algunas ideas?Entity Framework - ¿Por qué EF usa LEFT OUTER JOIN en una relación de 1 a 1?

A continuación se muestra la salida que veo cortesía del 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" 
+0

¿Están sus tablas correctamente con clave externa? – overslacked

+0

Sí, hay una clave externa de MYTABLE1 a MYTABLE2. –

+0

¿Esto es de una consulta de EF? O simplemente un Single()? – mxmissile

Respuesta

0

En la teoría de base de datos, se supone que en una relación uno-a-uno, una fila en un lado debe ser creado antes de la correspondiente fila en el otro lado. Si no usó una combinación externa, entonces nunca podría enumerar las filas que no tuvieron coincidencia.

Cuestiones relacionadas