Dapper调用存储过程并将结果映射到类

时间:2015-07-10 06:29:44

标签: c# sql-server stored-procedures dapper

我有一个T-SQL存储过程:

  pictureBox3.Left += this.Width - windowWIDTH;
  pictureBox3.Top += this.Height - windowHEIGHT;

C#mapping class:

CREATE PROCEDURE [dbo].[GetRequestTest] 
        @RequestId UNIQUEIDENTIFIER
AS
BEGIN
    SELECT 
        Request.Amount,
        Request.Checksum 
    FROM 
        Request 
    WHERE
        RequestId = @RequestId
END

我正在尝试使用Dapper调用存储过程:

public class CustomTest : Itest
{
    public decimal Amount {get;set;}
    public string Checksum { get; set; }
}

但结果为空

我试图调用将存储过程中的SQL语句直接放入C#代码中 - 它工作正常,但它不适用于存储过程。

任何想法 - 如何使其发挥作用?

2 个答案:

答案 0 :(得分:14)

你打错方法:

public void Load(CustomTest obj, Guid RequestId)
{
    using (var con = base.GetClosedConnection())
    {
        con.Open();                

        //result is list of CustomTest
        var result = db.Query<CustomTest>("GetRequestTest", new {RequestId},
                         commandType: CommandType.StoredProcedure);
    }            
}

如何使用短小精悍:https://github.com/StackExchange/dapper-dot-net

答案 1 :(得分:2)

using (var con = base.GetClosedConnection())
{
    var result = conn.Query<CustomTest>("exec [dbo].[GetRequestTest] @id", new {Id = RequestId});
}

列名称存储过程或查询返回应与CustomTest的属性名称相同(例如Amount,Checksum)。因此,您将收到填充了适当数据的IEnumerable。