2016-06-06 4 views
0

Я хочу вызвать хранимую процедуру навалом с помощью Dapper. Каждый вызов возвращает другой набор результатов, поэтому я использовал QueryMultiple. Если я создаю такие параметры, как:Как я могу использовать QueryMultiple Dapper с хранимой процедурой, но с другим значением параметра каждый раз?

var parameters = new DynamicParameters(); 
    // The stored proc accepts a single integer, but I want to pass multiple so each call had a new value. 
    parameters.Add("LookupID", lookupIds); 

    var resultSet = connection.QueryMultiple("SPName", parameters, commandType: System.Data.CommandType.StoredProcedure); 

Я получаю сообщение об ошибке, когда в хранимой процедуре указано слишком много аргументов. Так как же я могу это сделать?

+0

Я думаю, что основная идея с QueryMultiple заключается в том, что хранимая процедура возвращает несколько наборов результатов. Если вы хотите запросить различные определения параметров, определите несколько procs и вызовите их напрямую с помощью async/wait. –

ответ

1

QueryMultiple - о результатах, а не входы. Чтобы делать то, что вы хотите, вам нужно много раз называть SP. Что вы можете сделать что-либо с помощью простого foreach петли самостоятельно, или многие (не все) из щеголеватых методов позволят удобный метод, передавая в IEnumerable<T> качестве внешнего объекта, например:

int[] ids = ... 
var args = ids.Select(id => new { id, val = "ABC" }); 
db.Execute("whatever", args); 

Что будет выполнять SQL один раз за элемент, проходящий в @id и @val для каждого. В случае с API async это также можно объединить с MARS для устранения стоимости задержки между вызовами, но это отказ, поскольку MARS не является параметром по умолчанию.

В качестве альтернативы вы можете написать новый пакет SP, который принимает один параметр и разделяет его (новый string_split был бы идеальным) и выполняет цикл на сервере.

+0

Идти туда и обратно для вызова одного и того же SP для нескольких параметров, безусловно, подходит для подхода с высокой производительностью, предпочтительнее будет передавать TVP, где каждая строка представляет собой комбинацию параметров для данного выхода, не требуется даже синтаксический анализ строки, поскольку предложенный –

 Смежные вопросы

  • Нет связанных вопросов^_^