2015-07-17 3 views
0

Наш SQL DBA указал, что EF генерирует некоторый SQL, который вызывает неявное преобразование и приводит к некоторым проблемам с производительностью. Когда я запускаю веб-приложение локально, я вижу другой запрос, который генерирует сервер стадии/производства. Я предполагаю, что существуют различия EF между моим блоком dev и сервером и вам нужна помощь в определении того, где искать. Я проверил запросы в SQL Profiler.Различия в сгенерированном SQL - от локального до производственного сервера

Local: Windows 7, 64-разрядная версия, IIS 7

серверов: Windows Server 2003, 32-разрядная версия, IIS 6

Linq заявление (входящий является список типа строки):

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 это та же версия (4.0.30319.1)

+0

Уверен, что на сервере работает реальная .NET Framework 4, а на вашем ящике установлена ​​.NET Framework 4.5. (обратите внимание, что версия System.Data.Entity.dll будет одинаковой). В EF была ошибка, которая была исправлена ​​в EF5/.NET Framework 4.5, и поскольку .NET Framework 4.5 была обновлением на месте, исправление автоматически подбирается приложениями, использующими EF4. – Pawel

+0

Думаю, ты прав. Я ценю дополнительную информацию о том, как произошло исправление/обновление ошибок. К сожалению, я не могу установить 4.5 на теперь неподдерживаемые коробки. Наше обновление 2012 года развертывается в следующем месяце - я тестировал эти запросы, и они возвращаются аналогично моей машине. Если бы вы ответили как ответ, я бы с радостью отметил его как таковой. Спасибо! –

ответ

1

Похоже, ваш сервер работает реально .NET Framework 4, находясь на своем поле у ​​вас есть .NET Framework 4,5. (обратите внимание, что версия System.Data.Entity.dll будет одинаковой). В EF была ошибка, которая была исправлена ​​в EF5/.NET Framework 4.5, и поскольку .NET Framework 4.5 была обновлением на месте, исправление автоматически подбирается приложениями, которые используют EF4 в ящиках, на которых установлена ​​.NET Framework 4.5.

Вы можете изменить свое приложение, чтобы обойти ошибку, как описано here.

Смежные вопросы