2011-07-29 15 views
6

Estamos utilizando Dapper para mapear nuestros datos sql y hasta ahora ha funcionado muy bien. Tengo un caso, sin embargo, donde estamos haciendo algo similar a:Dapper handling devolvió el conjunto de resultados vacío

someObject = con.Query<T>("GetInfoSproc", p, commandType: CommandType.StoredProcedure).Single(); 

Esto funciona muy bien siempre y cuando el procedimiento almacenado que estoy llamando devuelve datos. Hay ocasiones en que el procedimiento almacenado puede no devolver un resultado y devolver un error en un parámetro out. Esta parece ser la causa de un problema en Dapper porque apuesto tiros el error:

"Al utilizar las API multi-mapeo, que hace de establecer el parámetro splitOn si tiene teclas que no sean Id"

¿Existe una forma de escribir la consulta para que pueda manejar adecuadamente el caso cuando se devuelve un resultado vacío o es esto una limitación de Dapper?

+1

He abierto un tema en el código de Google en este para su posterior discusión: http://code.google.com/p/dapper-dot-net/issues/detail?id=57 – TodK

+0

Para aquellos que puedan encontrar esta pregunta, encontré [esta respuesta] (http: // stackoverflow. com/questions/11720611/how-to-return-null-from-a-dapp er-query-rather-than-defaultt) útil. –

Respuesta

1

SingleOrDefault() es su amigo aquí

Prueba esto:

someObject = con.Query<T>("GetInfoSproc", p, commandType: CommandType.StoredProcedure).SingleOrDefault(); 
if (someObject != null) 
{ 
    // operate on your results here 
} 
return someObject; 

también tendrá que asegurarse de T es Nullable

+0

Si existe la posibilidad de que su SPROC pueda devolver una lista de , SingleOrDefault emitirá una excepción. En ese caso, es mejor utilizar FirstOrDefault. Ver los documentos Dapper: http://dapper-tutorial.net/querysingleordefault – maurocam

Cuestiones relacionadas