Я бачу деякі справді дивні можливості, пов’язані з дуже простим запитом за допомогою Entity Framework Code-First з .NET framework версії 4. Запит LINQ2Entities виглядає так:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
Для цього потрібно понад 3000 мілісекунд. Створений SQL виглядає дуже просто:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
Цей запит виконується майже миттєво під час запуску через Management Studio. Коли я змінюю код C # на використання функції SqlQuery, він працює за 5-10 мілісекунд:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Отже, точно такий же SQL, отримані сутності відстежуються в обох випадках, але дика різниця між ними. Що дає?
Performance Considerations for Entity Framework 5