Saltar al contenido

Generar y acceder a procedimientos almacenados utilizando Entity Framework Core

Revisamos cada una de las noticias de nuestra página web con la meta de enseñarte en todo momento la información certera y actualizada.

Solución:

El primer enfoque de la base de datos no existe en EF Core con archivos edmx. En su lugar, debe usar Scaffold-DbContext

Instale los paquetes de Nuget Microsoft.EntityFrameworkCore.Tools y Microsoft.EntityFrameworkCore.SqlServer.Design

Scaffold-DbContext "Server=(localdb)mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

pero eso no obtendrá sus procedimientos almacenados. Todavía está en proceso, problema de seguimiento n.º 245

Pero, para ejecutar los procedimientos almacenados, use el método FromSql que ejecuta consultas SQL RAW

p.ej

var products= context.Products
    .FromSql("EXECUTE dbo.GetProducts")
    .ToList();

Para usar con parámetros

var productCategory= "Electronics";

var product = context.Products
    .FromSql("EXECUTE dbo.GetProductByCategory 0", productCategory)
    .ToList();

o

var productCategory= new SqlParameter("productCategory", "Electronics");

var product = context.Product
    .FromSql("EXECUTE dbo.GetProductByName  @productCategory", productCategory)
    .ToList();

Existen ciertas limitaciones para ejecutar consultas SQL RAW o procedimientos almacenados. No puede usarlo para INSERTAR/ACTUALIZAR/ELIMINAR. si desea ejecutar INSERTAR, ACTUALIZAR, ELIMINAR consultas, use ExecuteSqlCommand

var categoryName = "Electronics";
dataContext.Database
           .ExecuteSqlCommand("dbo.InsertCategory @p0", categoryName);

Los ejemplos anteriores funcionan bien cuando se ejecuta un procedimiento almacenado si espera que el conjunto de resultados sea el mismo que cualquier objeto ya definido. Pero, ¿qué sucede si desea un conjunto de resultados que no es compatible? Según los desarrolladores de EF Core 2, esta es una característica que vendrá, pero ya existe una solución fácil.

Cree el modelo que desea utilizar para su salida. Este modelo representará la salida, no una tabla en la base de datos.

namespace Example.EF.Model

    public class Sample
    
        public int SampleID  get; set; 
        public string SampleName  get; set; 
    

Luego agregue a su contexto un nuevo DBSet con su modelo:

public virtual DbSet Sample  get; set; 

Y luego haga lo anterior y use su modelo para la salida:

var products = _samplecontext.Sample
      .FromSql($"EXEC ReturnAllSamples id, startdate, enddate").ToList();

Espero que esto ayude a alguien.

La solución alternativa que usamos en EF Core para ejecutar procedimientos almacenados para obtener los datos es usar el método FromSql y puede ejecutar el procedimiento almacenado de esta manera:

List employees = dbcontext.Employee
                    .FromSql("GetAllEmployees").ToList();

Pero para Crear, Actualizar y Eliminar, usamos ExecuteSqlCommand como el siguiente:

var employee = "Harold Javier";
dbcontext.Employee
           .ExecuteSqlCommand("InsertEmployee @emp", employee);

valoraciones y reseñas

Si te apasiona este mundo, tienes el poder dejar un tutorial acerca de qué le añadirías a esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *