c# - Entity Framework - 为什么 EF 在 1 对 1 关系中使用 LEFT OUTER JOIN?

标签 c# .net oracle entity-framework devart

为什么 .NET Entity Framework 会生成在简单的一对一关系上使用子查询和左外部联接的 SQL?我希望在两个表上看到一个简单的连接。我正在使用 Devart Dotconnect for 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"

最佳答案

在数据库理论中,假定在一对一的关系中,一侧的一行必须在另一侧的相应行之前创建。如果您不使用外部联接,那么您将永远无法列出不匹配的行。

关于c# - Entity Framework - 为什么 EF 在 1 对 1 关系中使用 LEFT OUTER JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459237/

相关文章:

.net - 在 .NET 3.5 SP1 上使用 EF 4

java - oracle blob数据迁移到Amazon s3

sql - Oracle SQL 将字符串转换为数字,异常(exception)情况是将文本视为 0

c# - xamarin 表单有音频控制吗

C# 图形界面问题

.net - UserPrincipal 对象中的域名在哪里?

c# - .Net 访问超大型数据库的最佳方法是什么?

c# - 一个页面上的多个 GridView

c# - 无法将对象隐式转换为字符串

.net - 具有自动滚动功能的 Windows.Forms.Panel 中的控制位置