Почему сгенерированные ormLite запросы для загрузки связанных ссылок с использованием IN не используют параметризованные запросы? - PullRequest
0 голосов
/ 07 мая 2020

У меня проблема, связанная с загрузкой справочных / дочерних таблиц при загрузке записей родительской таблицы из базы данных. Мой механизм БД - это MS SQL Server. Я использую ServiceStack.OrmLite v5.8.0. Мое приложение написано на C#. NET v4.6.2.

У меня есть три объекта: 1 родительский и 2 дочерних. Они правильно помечены с помощью необходимых аннотаций OrmLite. Я заметил, что при выполнении запроса из C# для выборки родительской таблицы, включая дочерние элементы, за один раз с использованием условия IN, запросы, которые создаются для загрузки дочерних записей, не параметризуются. Пожалуйста, взгляните на запросы, которые я получил от SQL Profiler ниже:

  1. Это первый запрос, который выбирает записи из родительской таблицы. Обратите внимание на использование параметризованного запроса:
exec sp_executesql N'SELECT "Id", "MeetingDateAndTime", "Location", "IsHeld", "ScheduledForDate", "ContactMeBy", "IsCanceled", "IncidentId", "IncidentNumber", "IncidentDateTime" 
FROM "HomePageSearch_ResolutionMeetings"
WHERE "Id" IN (@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10)
ORDER BY "IncidentDateTime" DESC',N'@0 int,@1 int,@2 int,@3 int,@4 int,@5 int,@6 int,@7 int,@8 int,@9 int,@10 int',@0=16,@1=15,@2=13,@3=14,@4=12,@5=8,@6=5,@7=6,@8=4,@9=1,@10=2
Это второй запрос, который выбирает записи из первой дочерней таблицы. Обратите внимание на использование жестко запрограммированных значений при генерации параметров:
exec sp_executesql N'SELECT "Id", "ResolutionSessionIdFk", "Type", "RespondentId", "FirstName", "LastName" FROM "HomePageSearch_ResolutionMeetingsInvitees" WHERE "ResolutionSessionIdFk" IN (SELECT "HomePageSearch_ResolutionMeetings"."Id" 
FROM "HomePageSearch_ResolutionMeetings"
WHERE "Id" IN (16,15,13,14,12,8,5,6,4,1,2))',N'@0 int,@1 int,@2 int,@3 int,@4 int,@5 int,@6 int,@7 int,@8 int,@9 int,@10 int',@0=16,@1=15,@2=13,@3=14,@4=12,@5=8,@6=5,@7=6,@8=4,@9=1,@10=2
Это третий запрос, который выбирает записи из второй дочерней таблицы. Обратите внимание на использование жестко запрограммированных значений во время создания параметров:
exec sp_executesql N'SELECT "Id", "ResolutionMeetingIdFk", "Type", "FirstName", "LastName" FROM "HomePageSearch_ResolutionMeetingsOfficers" WHERE "ResolutionMeetingIdFk" IN (SELECT "HomePageSearch_ResolutionMeetings"."Id" 
FROM "HomePageSearch_ResolutionMeetings"
WHERE "Id" IN (16,15,13,14,12,8,5,6,4,1,2))',N'@0 int,@1 int,@2 int,@3 int,@4 int,@5 int,@6 int,@7 int,@8 int,@9 int,@10 int',@0=16,@1=15,@2=13,@3=14,@4=12,@5=8,@6=5,@7=6,@8=4,@9=1,@10=2

Есть идеи, почему?

...