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