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.