2015-07-10 9 views
8

Ho un T-SQL stored procedure:Dapper chiamata stored procedure e risultato mappa per classe

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

C classe # mappatura:

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

sto chiamando provo a invocare stored procedure utilizzando Dapper:

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

     var p = new DynamicParameters(); 
     p.Add("@RequestId", dbType: DbType.Guid, direction: ParameterDirection.Input);    

     var result = con.ExecuteReader("[dbo].[GetRequestTest]", param: p, commandType: CommandType.StoredProcedure); 

     while (result.Read()) 
      obj.Amount = (decimal)result["Amount"]; 
    }    
} 

Ma risultato è nullo

Ho provato a chiamare per inserire l'istruzione SQL dalla stored procedure direttamente nel codice C# e funziona correttamente, ma non funziona con la stored procedure.

Qualche idea: come farlo funzionare?

risposta

7

si chiama il metodo sbagliato:

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

    }    
} 

Come usare Dapper: https://github.com/StackExchange/dapper-dot-net

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