Stiamo utilizzando lo standard Dapper.Net e ne siamo molto soddisfatti. Tuttavia abbiamo incontrato un problema quando si cerca di recuperare i parametri di output da stored procedure utilizzando multi.Read:Il parametro di output è sempre nullo con multi.Read
var p = new DynamicParameters();
p.Add("@id", id);
p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output);
using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p,
commandType: CommandType.StoredProcedure))
{
int TotalRows = p.Get<int>("@TotalRows"); //This is always null
var results = multi.Read<New_Supplier>().ToList<IDBSupplier>();
var areas = multi.Read<node>().ToList<IDBNode>();
var categories = multi.Read<node>().ToList<IDBNode>();
int TotalRows = multi.Read<int>().FirstOrDefault(); // This works
}
Tuttavia, se usiamo la sintassiconnection.Query per ottenere un singolo gruppo di risultati il parametro di uscita è popolata:
var result = cnn.Query<New_Supplier>(string.Format("spname"), p,
commandType: CommandType.StoredProcedure).ToList<New_Supplier>();
int TotalRows = p.Get<int>("@TotalRows");
l'errore è che lo sqlValue della AttachedParam sul parametro di uscita nelle DynamicParameters Dapper è sempre nullo.
Per aggirare questo abbiamo aggiunto il valore del parametro di uscita ai set di risultati della procedura memorizzata e lo stiamo leggendo in questo modo.
Perché il parametro è sempre nullo?
Grazie Marc, funziona. Sapevo * doveva essere qualcosa di semplice ma non potevo vederlo ... – Simon
@Simon è probabilmente ovvio ora, ma solo per aggiungere: si ottiene esattamente lo stesso comportamento quando si utilizza direttamente ADO.NET. –