Procedura memorizzata
Entity Framework consente di utilizzare stored procedure per eseguire la logica predefinita sulle tabelle del database. È possibile utilizzare query SQL raw per eseguire una stored procedure.
Ecco una semplice stored procedure, restituirà tutti i record dalla tabella Clienti quando viene eseguita.
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
In EF Core, è possibile eseguire stored procedure utilizzando il metodo FromSql()
.
using (var context = new MyContext())
{
var customers = context.Customers
.FromSql("EXECUTE dbo.GetAllCustomers")
.ToList();
}
È inoltre possibile passare i parametri quando si eseguono stored procedure.
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
Restituirà un record specifico dalla tabella Clienti in base a CustomerID passato come parametro.
using (var context = new MyContext())
{
var customer = context.Customers
.FromSql("EXECUTE dbo.GetCustomer 1")
.ToList();
}
È anche possibile passare un valore di parametro usando l'interpolazione di stringa C #.
using (var context = new MyContext())
{
int customerId = 1;
var customer = context.Customers
.FromSql($"EXECUTE dbo.GetCustomer ")
.ToList();
}