2010-03-17 104 views
6

爲什麼.NET Entity Framework會生成使用子查詢和左外連接的SQL,並使用簡單的1對1關係?我希望在這兩張桌子上看到一個簡單的連接。我正在使用Devart Dotconnect for Oracle。有任何想法嗎?實體框架 - 爲什麼EF使用1對1關係中的LEFT OUTER JOIN?

下面是輸出我看到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

你的表是否正確的外鍵? – overslacked 2010-03-17 01:25:44

+0

是的,有一個從MYTABLE1到MYTABLE2的外鍵。 – 2010-03-17 02:50:42

+0

這是來自EF查詢嗎?或者只是一個Single()? – mxmissile 2010-03-17 14:18:15

回答

0

在數據庫原理,假設在一比一的關係,一邊行必須進行相應的之前創建排在另一邊。如果你沒有使用外連接,那麼你永遠不會列出沒有匹配的行。