有沒有辦法用Dapper調用存儲過程?

.net dapper orm stored-procedures

對於stackoverflow.com的Dapper Micro ORM的結果我印象非常深刻。我正在考慮我的新項目,但我有一個擔心,有時我的項目需要有存儲過程,我在網上搜索了很多但沒有找到存儲過程的任何東西。那麼有沒有辦法讓Dapper使用存儲過程?

如果可能,請告訴我,否則我必須以我的方式延長它。

一般承認的答案

在簡單的情況下,你可以這樣做:

var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
        commandType: CommandType.StoredProcedure).First();

如果你想要更有趣的東西,你可以這樣做:

 var p = new DynamicParameters();
 p.Add("@a", 11);
 p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
 p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

 cnn.Execute("spMagicProc", p, commandType: CommandType.StoredProcedure); 

 int b = p.Get<int>("@b");
 int c = p.Get<int>("@c"); 

此外,您可以批量使用exec,但這更笨重。


熱門答案

我認為答案取決於您需要使用的存儲過程的哪些功能。

返回結果集的存儲過程可以使用Query運行;可以使用Execute運行不返回結果集的存儲過程 - 在兩種情況下(使用EXEC <procname> )作為SQL命令(根據需要加上輸入參數)。有關詳細信息,請參閱文檔

從版本2d128ccdc9a2開始 ,似乎沒有OUTPUT參數的原生支持;您可以添加它,或者構造一個更複雜的Query命令,它聲明TSQL變量,執行SP收集OUTPUT參數到局部變量中,最後在結果集中返回它們:

DECLARE @output int

EXEC <some stored proc> @i = @output OUTPUT

SELECT @output AS output1


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因