1

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 で左外部結合が多すぎますか?

4

2 に答える 2

0

最後に、いくつかのテストを実行することができました。EF T-SQL の生成は、基礎となるフレームワークに大きく依存しているようです。実際、上記の問題は、フレームワークを 4.5 にアップグレードするだけで修正されます。

于 2013-08-23T18:58:01.450 に答える