Procedimiento almacenado utilizando Dapper en MVC 4

asp.net asp.net-mvc c# dapper

Pregunta

Estoy intentando hacer una operación CRUD en MVC utilizando Dapper y el procedimiento almacenado, pero no puedo devolver el resultado del modelo al controlador debido a un error de conversión que no puedo resolver. ¿Alguien puede ayudarme? ¿Qué debo devolver como resultado?

Este es mi controlador

 public ActionResult AllMobileList()
 {
     MobileMain MM = new MobileMain();
     return View(MM.AllMobileListing().ToList());
 }

 [HttpGet]
 public ActionResult Edit(string MobileID)   
 {
     MobileMain MM = new MobileMain();
     return View(MM.GetMobileList(MobileID));
 }

Modelo

public IEnumerable<TBMobileDetails> AllMobileListing()
{
    var para = new DynamicParameters();
    para.Add("@Type", 1);
    var result= con.Execute("Sp_MVCDapper", para, commandType: CommandType.StoredProcedure).ToString();

    return result;  // Error happens here
}

public TBMobileDetails GetMobileList(string MobileId)
{
    var para = new DynamicParameters();
    para.Add("@Type", 2);
    para.Add("@MobileId",Convert.ToInt32(MobileId));
    var result = con.Execute("Sp_MVCDapper", para, commandType: CommandType.StoredProcedure).ToString();

    return result;  // Error happens here
}

Error:

No se puede convertir implícitamente el tipo 'cadena' a 'System.Collections.Generic.IEnumerable'

Sé que es un error muy común y estoy cometiendo un error estúpido.

Respuesta aceptada

Debe usar el método de extensión Dapper's Query<T> para obtener los resultados de una llamada a procedimiento almacenado, si el SP usa una instrucción select para devolver datos.

Query<T> devuelve un IEnumerable<T> , por lo que puede usar simplemente para IEnumerable<TBMobileDetails> AllMobileListing():

return con.Query<TBMobileDetails>(
    "Sp_MVCDapper", para, commandType: CommandType.StoredProcedure)

y para TBMobileDetails GetMobileList(string MobileId)

var list = con.Query<TBMobileDetails >(
    "Sp_MVCDapper", para, commandType: CommandType.StoredProcedure);

return list.Single(); // assuming that the SP only returns a single item

Y como observación: si su parámetro es un número, entonces no use un tipo de string . Solo causa dolores de cabeza más tarde.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué