Entity Framework Core Tutorial Procedimiento almacenado
Entity Framework le permite utilizar procedimientos almacenados para realizar una lógica predefinida en las tablas de la base de datos. Las consultas de SQL sin procesar se pueden utilizar para ejecutar un procedimiento almacenado.
Aquí hay un procedimiento almacenado simple, devolverá todos los registros de la tabla de Clientes cuando se ejecute.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetAllCustomers]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[GetAllCustomers] AS SELECT * FROM dbo.Customers ' END GO
En EF Core, puede ejecutar procedimientos almacenados utilizando el método FromSql()
.
using (var context = new MyContext()) { var customers = context.Customers .FromSql("EXECUTE dbo.GetAllCustomers") .ToList(); }
También puede pasar parámetros al ejecutar procedimientos almacenados.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetCustomer]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[GetCustomer] @CustomerID int AS SELECT * FROM dbo.Customers WHERE CustomerID = @CustomerID ' END GO
Devolverá un registro específico de la tabla Clientes en función de CustomerID pasado como parámetro.
using (var context = new MyContext()) { var customer = context.Customers .FromSql("EXECUTE dbo.GetCustomer 1") .ToList(); }
También puede pasar un valor de parámetro utilizando la interpolación de cadenas C #.
using (var context = new MyContext()) { int customerId = 1; var customer = context.Customers .FromSql($"EXECUTE dbo.GetCustomer {customerId}") .ToList(); }