У меня есть объект, определенный в EF 4.0, который основан на представлении. Представление лежит над таблицей с около 18 миллионами строк данных. Я выбрал 4 детерминированных свойства объекта в качестве составного ключа объекта для этого объекта. Я предоставил доступ к модели, содержащей это представление, через службу данных OData WCF. Служба данных WCF настроена на ограничение результатов, например
config.SetEntitySetPageSize("*", 100)
Когда я делаю базовый запрос для этого представления:
var fcbs = this.iBenchmarkCostContext.FtCostBenchmarks.ToArray();
Это запрос, который я вижу в своем инструменте профилирования:
SELECT TOP (100) [Extent1].[MonthBeginDt] AS [MonthBeginDt],
[Extent1].[dmCostBenchmarkKey] AS [dmCostBenchmarkKey],
[Extent1].[dmProductKey] AS [dmProductKey],
[Extent1].[IsImputedFlg] AS [IsImputedFlg],
[Extent1].[ProjectedCopayPerRxAmt] AS [ProjectedCopayPerRxAmt],
[Extent1].[ProjectedPricePerQtyAmt] AS [ProjectedPricePerQtyAmt],
[Extent1].[ProjectedQtyPerRxQty] AS [ProjectedQtyPerRxQty],
[Extent1].[ProjectedRxCnt] AS [ProjectedRxCnt],
[Extent1].[AvgPriceRxAvgPriceQtyDenominator] AS [AvgPriceRxAvgPriceQtyDenominator],
[Extent1].[AvgQtyDenominator] AS [AvgQtyDenominator],
[Extent1].[AvgCopayDenominator] AS [AvgCopayDenominator],
[Extent1].[ProjectedTotalCostAmt] AS [ProjectedTotalCostAmt],
[Extent1].[AllowedRxCnt] AS [AllowedRxCnt],
[Extent1].[CopayRxCnt] AS [CopayRxCnt],
[Extent1].[TotalAllowedAmt] AS [TotalAllowedAmt],
[Extent1].[TotalCopayAmt] AS [TotalCopayAmt],
[Extent1].[TotalCostPerUnitAmt] AS [TotalCostPerUnitAmt],
[Extent1].[TotalUnitQty] AS [TotalUnitQty],
[Extent1].[RC] AS [RC]
FROM (SELECT [ftCostBenchmark].[MonthBeginDt] AS [MonthBeginDt],
[ftCostBenchmark].[dmCostBenchmarkKey] AS [dmCostBenchmarkKey],
[ftCostBenchmark].[dmProductKey] AS [dmProductKey],
[ftCostBenchmark].[IsImputedFlg] AS [IsImputedFlg],
[ftCostBenchmark].[ProjectedCopayPerRxAmt] AS [ProjectedCopayPerRxAmt],
[ftCostBenchmark].[ProjectedPricePerQtyAmt] AS [ProjectedPricePerQtyAmt],
[ftCostBenchmark].[ProjectedQtyPerRxQty] AS [ProjectedQtyPerRxQty],
[ftCostBenchmark].[ProjectedRxCnt] AS [ProjectedRxCnt],
[ftCostBenchmark].[AvgPriceRxAvgPriceQtyDenominator] AS [AvgPriceRxAvgPriceQtyDenominator],
[ftCostBenchmark].[AvgQtyDenominator] AS [AvgQtyDenominator],
[ftCostBenchmark].[AvgCopayDenominator] AS [AvgCopayDenominator],
[ftCostBenchmark].[ProjectedTotalCostAmt] AS [ProjectedTotalCostAmt],
[ftCostBenchmark].[AllowedRxCnt] AS [AllowedRxCnt],
[ftCostBenchmark].[CopayRxCnt] AS [CopayRxCnt],
[ftCostBenchmark].[TotalAllowedAmt] AS [TotalAllowedAmt],
[ftCostBenchmark].[TotalCopayAmt] AS [TotalCopayAmt],
[ftCostBenchmark].[TotalCostPerUnitAmt] AS [TotalCostPerUnitAmt],
[ftCostBenchmark].[TotalUnitQty] AS [TotalUnitQty],
[ftCostBenchmark].[RC] AS [RC]
FROM [dbo].[ftCostBenchmark] AS [ftCostBenchmark]) AS [Extent1]
ORDER BY [Extent1].[MonthBeginDt] ASC,
[Extent1].[dmCostBenchmarkKey] ASC,
[Extent1].[dmProductKey] ASC,
[Extent1].[IsImputedFlg] ASC
Хотя я явно не запрашивал никакого упорядочения, добавляется предложение order by, которое включает поля, включенные в составной ключ сущности, определенный для сущности. Выполнение этого запроса занимает чрезмерное количество времени и генерирует блокировки страниц в базе данных. Удаление ORDER BY
из запроса в среде SQL Server возвращает результаты менее чем за миллисекунду.
Итак, мой вопрос:
Как я могу помешать EF добавить этот запрос по предложению к запросу?