簡體   English   中英

如何將Dapper的QueryMultiple與存儲過程一起使用,但每次使用不同的參數值?

[英]How can I use Dapper's QueryMultiple with a stored procedure, but with a different parameter value each time?

我想用Dapper批量調用存儲過程。 每個調用將返回不同的結果集,因此我使用的是QueryMultiple。 如果我創建這樣的參數:

    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);

我收到一個錯誤,指出存儲過程指定了太多參數。 那我還能怎么做呢?

QueryMultiple與結果有關,而不是輸入。 要執行您想要的操作,您需要多次調用SP。 您可以自己通過簡單的foreach循環執行,也可以通過很多(並非全部)dapper方法通過將IEnumerable<T>作為最外層對象傳遞來提供一種便捷方法,例如:

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

它將為每個項目傳遞一次@id@val一次執行SQL。 對於async API,它也可以與MARS結合使用,以消除調用之間的延遲成本,但這是可選的,因為MARS不是默認選項。

或者,您可以編寫一個新的包裝SP,該包裝采用一個參數並將其拆分(新的string_split將是理想選擇),然后在服務器上執行循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM