为什么EF 6.4生成的SQL有故障?
我有一个类似这样的查询。 用户ID是随机字母字符串。 searchCritera是要搜索的模型。 searchCriteria.MainRoleValueList包含搜索的角色(枚举) 生成的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 [
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