为什么EF 6.4生成的SQL有故障?

为什么EF 6.4生成的SQL有故障?,sql,entity-framework,linq-to-entities,Sql,Entity Framework,Linq To Entities,我有一个类似这样的查询。 用户ID是随机字母字符串。 searchCritera是要搜索的模型。 searchCriteria.MainRoleValueList包含搜索的角色(枚举) 生成的sql代码是 SELECT [Extent1].[Id] AS [Id], [Extent1].[UserId] AS [UserId], [Extent1].[Main_Id] AS [Main_Id], [Extent1].[MainRoleValue] AS [

我有一个类似这样的查询。 用户ID是随机字母字符串。 searchCritera是要搜索的模型。 searchCriteria.MainRoleValueList包含搜索的角色(枚举)

生成的sql代码是

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[UserId] AS [UserId], 
    [Extent1].[Main_Id] AS [Main_Id], 
    [Extent1].[MainRoleValue] AS [MainRoleValue], 
    [Extent1].[ValidFrom] AS [ValidFrom], 
    [Extent1].[ValidTo] AS [ValidTo]
    FROM  [dbo].[MainRoleMembership] AS [Extent1]
    INNER JOIN [dbo].[Person] AS [Extent2] ON ([Extent1].[UserId] = [Extent2].[UserId]) AND ([Extent1].[Main_Id] = [Extent2].[Main_Id])
    WHERE ([Extent1].[MainRoleValue] IN (300, 400, 200, 410)) AND ([Extent1].[ValidTo] IS NULL) AND (([Extent2].[FullName] LIKE '%rty12tt%' ESCAPE N'~') 
    OR ([Extent2].[UserId] LIKE '%rty12tt%' ESCAPE N'~')) AND 
    ( EXISTS (SELECT 
        1 AS [C1]
        FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
        WHERE 1 = 0
    ))
除了最后一部分,它还能工作

EXISTS (SELECT 
        1 AS [C1]
        FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
        WHERE 1 = 0
为什么要加上这个?因为它删除了我想要的正确结果。 如果我删除该部分并在SQL server上运行查询,我将获得所需的用户。 我应该如何重写我的查询,使其不包括在内

添加:是的,有UserId的两个表没有外键 用户ID。这是一个糟糕的系统设计,但我暂时无法修复


添加:在表之间为UserId添加了一个外键,但没有帮助

我添加了一个外键,并与一个空列表进行了比较。。这就是为什么

EXISTS (SELECT 
        1 AS [C1]
        FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
        WHERE 1 = 0

增加了。添加了清单的计数检查,问题消失了,从我所看到的,这是来自你所考虑的“很多代码不影响这个SeaReo”。EF6总是这样做,当它从模型约束+谓词推断谓词只能是假的。应该添加的时候添加了一个空列表
EXISTS (SELECT 
        1 AS [C1]
        FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
        WHERE 1 = 0