stored sqlquery procedimiento mvc mapeo mapear funcion framework executesqlcommand ejemplos ejecutar devuelve columnas almacenado c# asp.net-mvc stored-procedures entity-framework-6

c# - sqlquery - mapear stored procedure entity framework



Cómo llamar al procedimiento almacenado que devuelve columnas con espacios (2)

Intento llamar a un procedimiento almacenado utilizando la entidad 6.0. Después de buscar estas soluciones aquí y aquí , no resolvieron el problema. El problema es que una de las columnas devueltas tiene espacios (no puedo cambiar el procedimiento almacenado). He intentado lo siguiente sin éxito:

MyModel.cs

using System; ... namespace ... { public class MyModel { [Display(Name = "ID")] public string id{ get; set; } [Display(Name = "Number Of ID")] [Column("Number Of ID")] public int number_Of_ID { get; set; } } public class MyModelContext : DbContext { public DbSet<MyModel> MyModels{ get; set; } } }

MyController.cs

using System; ... namespace ... { public class MyController : Controller { private MyEntities db = new MyEntities (); public ActionResult Index() { var query = @"exec usp_getIds"; var results = db.Database.SqlQuery<MyModel>(query); return View(results); } }

Al depurar el código, mi modelo tiene un valor para id pero no para number_Of_ID . El valor siempre es 0. También he intentado cambiar el tipo de datos a una string y devuelve null . Por favor ayuda.


¿Quiere decir que hay espacios en el nombre de una columna o en un valor?

Para un procedimiento almacenado usp_getIds, debería poder hacer:

List<usp_getIds_Result> results = db.usp_getIds().ToList();

La clase usp_getIds_Result se crea automáticamente cuando agrega el procedimiento al modelo.

Vea si esto ayuda a probar esto.


Si bien no pude usar un DBContext , encontré una solución usando SQLDataAdapter . Pude hacer la llamada con éxito incluso con columnas que tenían espacios. Lo siguiente fue cambiado en el controlador:

MyController.cs

using System; ... namespace ... { public class MyController : Controller { public ActionResult Index() { var myResultsList = new List<MyModel>(); string connectionString = ConfigurationManager.AppSettings["myDBConn"]; var conn = new SqlConnection(connectionString); conn.Open(); string query = @"usp_getIds"; using (var sqlAdpt = new SqlDataAdapter(query, conn)) { sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure; var results = new DataSet(); sqlAdpt.Fill(results); myResultsList= results.Tables[0].AsEnumerable(). Select(dataRow => new MyModel { id = dataRow.Field<string>("ID"), numberOfID = dataRow.Field<int>("Number Of ID") }).ToList(); } return View(myResultsList); } }