生成的差异 SQL - 本地到生产服务器

Differences in generated SQL - Local to Production Server

我们的 SQL DBA 指出 EF 正在生成一些 SQL 导致隐式转换并导致一些性能问题。当我在本地 运行 Web 应用程序时,我看到与 stage/production 服务器生成的查询不同的查询。我假设我的开发箱和服务器之间存在 EF 差异,需要帮助确定在哪里查看。我已经在 SQL Profiler 中验证了查询。

本地:Windows7、64 位、IIS 7

服务器:Windows Server 2003,32 位,IIS 6

Linq语句(传入是字符串类型的List):

var result = from i in context.ProductImages
                         where incoming.Contains(i.productID)
                         select i;
            var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString();

            return result.ToList();

本地生成的查询:

SELECT [Extent1].[column1],
[Extent1].[column2],
..rest of columns...
WHERE [Extent1].[productID] IN ('000176725','000176726','000176728')

服务器生成的查询:

SELECT [Extent1].[column1],
[Extent1].[column2],
..rest of columns...
WHERE [Extent1].[productID] IN (N'000176725',N'000176726',N'000176728')

关于在哪里调查以确定造成代际差异的原因的任何想法? "N'" 导致了性能挑战。

据我所知,System.Data.Entity dll 是同一版本 (4.0.30319.1)

看起来您的服务器运行的是实际的 .NET Framework 4,而您的机器上安装的是 .NET Framework 4.5。 (请注意 System.Data.Entity.dll 的版本将相同)。 EF 中有一个错误已在 EF5/.NET Framework 4.5 中修复,并且由于 .NET Framework 4.5 是就地更新,因此在安装了 .NET Framework 4.5 的机器上使用 EF4 的应用程序会自动获取此修复程序。

您可以按照 here.

中所述更改您的应用以解决该错误