.net 即使基础查询返回数据,实体框架在连接到可为null的字段时也不返回数据
我从EntityFramework得到了一个令人困惑的结果。我有以下疑问:.net 即使基础查询返回数据,实体框架在连接到可为null的字段时也不返回数据,.net,vb.net,entity-framework,entity-framework-6,.net,Vb.net,Entity Framework,Entity Framework 6,我从EntityFramework得到了一个令人困惑的结果。我有以下疑问: Dim dbTeamAndContact1 = ( From t In db.Teams.Where(Function(x) x.TeamId = 123456) Join c In db.Contacts On t.ContactId Equals c.ContactId Select New With {.Team = t, .Contact = c} ). FirstOrDefault 这是一个非常简单的连接,可
Dim dbTeamAndContact1 =
(
From t In db.Teams.Where(Function(x) x.TeamId = 123456)
Join c In db.Contacts
On t.ContactId Equals c.ContactId
Select New With {.Team = t, .Contact = c}
).
FirstOrDefault
这是一个非常简单的连接,可能存在这样的问题:Team.ContactId可以为null,但对于指定的Team id,实际上不是null
当我运行它时,我从实体框架中得到Nothing/null。但是,当我获取EF正在使用的底层SQL语句并直接对数据库运行该语句时,它是一个直接的内部JOIN语句,返回预期的团队和联系人。但不知何故,EF在将这些数据返回到客户端代码时会感到困惑
我看不出代码有什么问题。这里发生了什么?仔细检查查询是否针对您期望的数据库执行。运行时的连接字符串可能指向不同的数据库。对数据库运行探查器以捕获正在运行的确切SQL,然后对同一数据库运行它。如果它同时返回团队和联系人的数据,但EF没有同时填充其中一个/两个,则会发生一些奇怪的事情。您是否考虑过利用导航属性,以便团队可以参考其联系人?(通常比显式联接更容易处理)是的,这就是问题所在。一个不相关的中间件让我指向了错误的数据库,该数据库有足够相似的数据,不明显,但差异足以导致此问题。我应该使用导航属性,但我还没来得及了解它们是如何工作的。