在 Windows 2008 R2 Server 上部署时,我的应用程序遇到了一个非常奇怪的问题。
鉴于这个非常简单的 LINQ 片段:
return From
invoice In Me.Invoices
Where
loggedCustomerID.Contains(invoice.Contract.CustomerID)
Order By
invoice.Date Descending
该应用程序可以工作,但在某些情况下(在客户服务器上),生成的 T-SQL 非常奇怪:
SELECT
[Extent1].[ContractID] AS [ContractID], ...
FROM
[dbo].[Invoice] AS [Extent1]
INNER JOIN [dbo].[Contract] AS [Extent2] ON
[Extent1].[ContractID] = [Extent2].[ContractID]
LEFT OUTER JOIN [dbo].[Contract] AS [Extent3] ON
[Extent1].[ContractID] = [Extent3].[ContractID]
WHERE
[Extent2].[CustomerID] = 482283
OR [Extent3].[CustomerID] IN (498565,482282,498564,498566)
- 表链接多次(?)
- 该
IN
语句被分解为多个 T-SQL 条件而不是单个IN
语句
显然,相同的包在我的系统上运行良好,生成了正确的查询,而无需多次链接同一个表并且只创建一个IN
语句。
我使用的是 EF 5.0,但与 Framework 4.0 兼容(因此程序集显示版本 4.4)。这是这个问题的根本原因吗?
这里有什么问题?
看起来行为与此有关? Entity Framework 4 中的左外连接太多?