tag stored net fromsql framework asp c# stored-procedures asp.net-core entity-framework-core

c# - stored - Procedimientos almacenados de.NET Core Entity Framework



stored procedure.net core (2)

Estoy tratando de portar una aplicación ASP.NET 4.5 a .NET Core y tengo un problema real que parece que no puedo resolver.

Mi aplicación existente ejecuta procs almacenados que devuelven un conjunto de datos con tablas de datos múltiples. Entity Framework puede asignar automáticamente los campos devueltos a las propiedades de mi entidad, pero solo funciona con la primera tabla de datos en el conjunto de datos (naturalmente).

Así que estoy tratando de averiguar si es posible interceptar de algún modo el proceso de creación del modelo y usar un código personalizado para procesar el conjunto de datos y buscar en las otras tablas de datos para establecer los campos de las entidades.

Sé que puedo usar la forma normal de ejecutar el procedimiento almacenado directamente con SqlConnection pero me pregunto si el Entity Framework ya tiene alguna forma de hacerlo.


Para responder al problema de @DKhanaf con conjuntos de datos múltiples, puede usar SqlDataAdapter para completar un objeto DataSet con todos sus conjuntos de resultados. Sin embargo, SqlDataAdapter requiere el .NET Framework completo, por lo que tendría que ejecutar su proyecto .NETCore mientras apunta a .NET 462 o algo similar.

using (var context = new SampleContext()) using (var command = context.Database.GetDbConnection().CreateCommand()) { command.CommandText = "GetData"; command.CommandType = CommandType.StoredProcedure; context.Database.OpenConnection(); using (SqlDataAdapter adapter = new SqlDataAdapter(command)) { var ds = new DataSet(); adapter.Fill(ds); return ds; } } }


Por el momento, la forma de ejecutar procedimientos almacenados que devuelven datos es usar el método DbSet.FromSql .

using (var context = new SampleContext()) { var data= context.MyEntity .FromSql("EXEC GetData") .ToList(); }

Esto tiene ciertas limitaciones:

  • Debe ser llamado en un DbSet
  • Los datos devueltos deben correlacionarse con todas las propiedades en el tipo DbSet
  • No es compatible con objetos ad hoc.

O puede recurrir a ADO.NET simple:

using (var context = new SampleContext()) using (var command = context.Database.GetDbConnection().CreateCommand()) { command.CommandText = "GetData"; command.CommandType = CommandType.StoredProcedure; context.Database.OpenConnection(); using (var result = command.ExecuteReader()) { // do something with result } }

Hay planes para introducir soporte para devolver tipos ad hoc de consultas SQL en algún momento.