Windows 2008 R2 サーバーにデプロイするときに、アプリケーションで非常に奇妙な問題が発生します。
この非常に単純な 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 で左外部結合が多すぎますか?