Что вызывает этот случайный GUID в сгенерированном запросе sql (OData + EF) - PullRequest
0 голосов
/ 25 марта 2020

У меня есть настройка REST API с OData v4 и Entity Framework (v6.4). Всякий раз, когда я выполняю расширение в API (v1/api/main?$expand=Items), сгенерированный sql содержит этот случайный GUID. Я почти уверен, что это используется для «идентификации» расширенных элементов, но есть ли способ либо избавиться от него, либо изменить его на параметр?

Это вызывает серьезные проблемы с журналированием sql, а также с оптимизацией плана запроса.

Сгенерированный sql ниже (я опустил выбор, а также изменил имена полей / таблиц) )

SELECT
    [Project3].[ID] AS [ID],
    [Project3].[C1] AS [C1],
    [Project3].[ID2] AS [ID2],
   ...
    FROM ( SELECT
        [Limit1].[ID] AS [ID],
        [Limit1].[ID2] AS [ID2],
        ...
        CASE WHEN ([Limit2].[ID3] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C5]
        FROM   (SELECT TOP (21) [Project1].[ID] AS [ID], [Project1].[ID2] AS [ID2], ...
            FROM ( SELECT
                [Extent1].[ID] AS [ID],
                [Extent1].[ID2] AS [ID2],
                ...
                N'538522f0-f041-4fc3-9ce9-5b9e7ba62d4b' AS [C1],
                N'Items' AS [C2],
                20 AS [C3]
                FROM [DBSchema].[vMain] AS [Extent1]
                WHERE ([Extent1].[ID] = @p__linq__0) AND ([Extent1].[OtherID] = @p__linq__1)
            )  AS [Project1]
            ORDER BY [Project1].[ID] ASC ) AS [Limit1]
        OUTER APPLY  (SELECT TOP (@p__linq__2) [Project2].[ID3] AS [ID3], [Project2].[ID] AS [ID], [Project2].[ID2] AS [ID2], ...
            FROM ( SELECT
                [Extent2].[ID3] AS [ID3],
                [Extent2].[ID] AS [ID],
                [Extent2].[ID2] AS [ID2],
               ...
                N'538522f0-f041-4fc3-9ce9-5b9e7ba62d4b' AS [C1]
                FROM [DBSchema].[vItems] AS [Extent2]
                WHERE ([Limit1].[ID] = [Extent2].[ID]) AND ([Limit1].[ID2] = [Extent2].[ID2])
            )  AS [Project2]
            ORDER BY [Project2].[ID3] ASC ) AS [Limit2]
    )  AS [Project3]
    ORDER BY [Project3].[ID] ASC, [Project3].[ID2] ASC, [Project3].[C5] ASC

1 Ответ

0 голосов
/ 30 марта 2020

Я нашел ответ. Это ModelID. Недавно в Microsoft.As pNet .OData версии 7.2 была исправлена ​​ошибка, из-за которой не соблюдался флаг EnableConstantParameterization.

https://github.com/OData/WebApi/blob/f372ead362c40c24c1f29ff4f27a7b7659302273/src/Microsoft.AspNet.OData.Shared/Query/Expressions/SelectExpandBinder.cs#L282

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...