Выполнение большого количества динамических основных запросов EF с различиями только в параметрах в SQL Server.C#

Место общения программистов C#
Ответить
Anonymous
 Выполнение большого количества динамических основных запросов EF с различиями только в параметрах в SQL Server.

Сообщение Anonymous »

Я пытаюсь оптимизировать производительность некоторого кода .NET, работающего с базой данных SQL Server через EF Core, но никогда раньше не сталкивался с чем-то подобным.
Это code принимает пользовательскую строку запроса (собственный синтаксис) и преобразует ее в Expression для использования с предикатом запроса EF Where. Эта строка запроса может иметь от 0 до 5 параметров.
В дополнение к строке запроса она будет связана с массивом строк (в настоящее время он находится в файле), разделенных запятыми, с одно значение для каждого параметра в запросе.
Например, может существовать пользовательская строка запроса, такая как:

Код: Выделить всё

"Car.Color = %1 and Car.NumDoors = %2"
А затем список строк, содержащий все итерации параметров для этого запроса, например:

Код: Выделить всё

"Red",2
"Blue,4
"Green",2
"Red",4
Цель здесь — выполнить запрос для каждой перечисленной комбинации параметров и получить идентификатор PK (только) для записей, соответствующих запросу.
Уже существует код, который превращает эту пользовательскую синтаксическую строку в выражение, а также некоторый код, который заполняет ее каждым набором параметров. Этот код довольно быстрый и не кажется проблематичным (не то чтобы это имело значение, потому что я все равно не могу изменить эту часть кода).
Настоящая проблема заключается в пользовательском характере из этих запросов они выполняются индивидуально... поэтому, если имеется 100 тысяч строк комбинаций параметров, к базе данных выполняется 100 тысяч запросов.
Я пытаюсь выяснить, как я могу это оптимизировать каким-то образом группируя эти вызовы базы данных. Я не могу делать никаких предположений о том, насколько сложной может быть строка пользовательского запроса, хотя в ней максимум 5 параметров... но в принципе здесь может быть любое простое логическое выражение (включая круглые скобки и т. д.).
Надеялся найти предложение по этому вопросу. Преобразование выражения в строку T-SQL тривиально, но даже использование чего-то, предназначенного для динамического SQL, такого как sp_executesql, похоже, не сильно помогает... оно по-прежнему выполняет один запрос/набор параметров за раз (насколько это возможно). насколько я могу судить).

Подробнее здесь: https://stackoverflow.com/questions/786 ... difference
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»