Я звоню SQL Server 10 из Entity Framework в C # и хочу получить подсказку запроса в запросе.База данных имеет индексы, которые обычно работают из SQL, запускаемого в Management Studio, но при вызове команды из C # с использованием Entity Framework в Visual Studio планировщик запросов выбирает полное сканирование, когда индекс уже существует.
Ясоздание динамических предикатов для запроса данных в следующей форме:
data.attributeText = data.vegaDB.attributeText.AsExpandable().Where(parentPredicate.Compile()).ToList();
, где parentPredicate
- это динамически генерируемый эквивалент:
(parentID = p1) AND (attributeName = 'name OR ... ')
, из которого создается план запроса SQL Server:
SELECT
[Extent1].[attributeID] AS [attributeID],
[Extent1].[parentID] AS [parentID],
[Extent1].[typeID] AS [typeID],
[Extent1].[attributeName] AS [attributeName],
[Extent1].[attributeData] AS [attributeData]
FROM [dbo].[attributeText] AS [Extent1]
Таким образом, замена [Extent1]
на индекс [IX_parentID]
, который использует прямой вызов sql, какой-то дополнительной командой, которая делает подсказку запроса при первоначальном вызове c #, может показаться решением.Я осмотрелся вокруг, но безуспешно.Есть идеи, как сформулировать вопрос?
Как вы думаете, это правильное решение?