Procedura: eseguire una query utilizzando una stored procedure (Entity Framework)
Numerosi sviluppatori di applicazioni e amministratori di database utilizzano le stored procedure per implementare la sicurezza, fornire prevedibilità e incapsulare la logica nei dati nel database. Il codice dell'applicazione che recupera i dati mappati a una stored procedure utilizza una funzione identificata dall'elemento FunctionImport. Gli elementi di base della sintassi dello schema necessari per il mapping di una stored procedure a un'implementazione del modello EDM (Entity Data Model) vengono illustrati in Procedura: definire un modello con una stored procedure (Entity Framework).
In EDM sono supportati due tipi di mapping delle stored procedure. Per ulteriori informazioni sull'esecuzione del mapping di stored procedure che aggiornano i dati, vedere Supporto delle stored procedure (Entity Framework).
Gli esempi inclusi in questo argomento sono basati sul modello Sales di AdventureWorks. Per eseguire il codice incluso in questo esempio, è necessario avere già aggiunto il modello Sales di AdventureWorks al progetto e avere configurato il progetto per l'utilizzo di Entity Framework. A tale scopo, completare le procedure descritte in Procedura: configurare manualmente un progetto di Entity Framework e Procedura: definire manualmente un modello EDM (Entity Framework).
Nello schema vengono definite cinque entità:
Address
Contact
Product
SalesOrderDetail
SalesOrderHeader
Nei passaggi seguenti vengono implementati un'applicazione client e il codice che esegue una stored procedure mappata all'elemento FunctionImportGetOrderDetails
nello schema concettuale del modello di dati. La funzione recupera le entità SalesOrderDetail
correlate a un'entità SalesOrderHeader
specificata. L'associazione FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID di tale modello può essere utilizzata per la stessa funzione dell'esempio.
Per creare la stored procedure nel database
Creare un'applicazione console.
Aggiungere un riferimento alla DLL implementata nell'argomento Procedura: definire un modello con una stored procedure (Entity Framework).
Aggiungere riferimenti a System.Data.Entity e System.Runtime.Serialization.
Aggiungere la direttiva per il preprocessore per AdventureWorksModel implementato in Procedura: definire un modello con una stored procedure (Entity Framework).
Esempio
La stored procedure viene utilizzata con il parametro richiesto per SalesOrderHeaderId
. È possibile individuare la sintassi nel Visualizzatore oggetti come metodo sullo spazio dei nomi AdventureWorksEntities
: GetOrderDetails(int)
. Il codice seguente consente di eseguire la stored procedure per restituire i risultati che vengono quindi enumerati in un ciclo foreach
.
Option Explicit On
Option Strict On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports AdvWrksSalesModel
Module Module1
Sub Main()
Try
Using db As AdvWksSalesEntities = New AdvWksSalesEntities()
Dim soHeaderNumber As Integer = 43659
For Each order As SalesOrderDetail _
In db.GetOrderDetails(soHeaderNumber)
Console.WriteLine("Header#: {0} " & _
"Order#: {1} ProductID: {2} Quantity: {3} Price: {4}", _
soHeaderNumber, order.SalesOrderDetailID, order.ProductID, _
order.OrderQty, order.UnitPrice)
Next
End Using
Catch ex As System.Data.MappingException
Console.WriteLine(ex.ToString())
Catch ex As System.Data.CommandExecutionException
Console.WriteLine(ex.ToString())
End Try
End Sub
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdvWrksSalesModel;
namespace AdvWksSalesSProcs
{
class Program
{
static void Main(string[] args)
{
using (AdvWksSalesEntities objCtx =
new AdvWksSalesEntities())
{
try
{
int soHeaderNumber = 43659;
foreach (SalesOrderDetail order in
objCtx.GetOrderDetails(soHeaderNumber))
Console.WriteLine("Header#: {0} " +
"Order#: {1} ProductID: {2} Quantity: {3} Price: {4}",
soHeaderNumber, order.SalesOrderDetailID,
order.ProductID,
order.OrderQty, order.UnitPrice);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
}
L'output risulterà analogo al seguente:
Header#: 43659 Order#: 1 ProductID: 776 Quantity: 1 Price: 2024.9940
Header#: 43659 Order#: 2 ProductID: 777 Quantity: 3 Price: 2024.9940
Header#: 43659 Order#: 3 ProductID: 778 Quantity: 1 Price: 2024.9940
Header#: 43659 Order#: 4 ProductID: 771 Quantity: 1 Price: 2039.9940
Header#: 43659 Order#: 5 ProductID: 772 Quantity: 1 Price: 2039.9940
Header#: 43659 Order#: 6 ProductID: 773 Quantity: 2 Price: 2039.9940
Header#: 43659 Order#: 7 ProductID: 774 Quantity: 1 Price: 2039.9940
Header#: 43659 Order#: 8 ProductID: 714 Quantity: 3 Price: 28.8404
Header#: 43659 Order#: 9 ProductID: 716 Quantity: 1 Price: 28.8404
Header#: 43659 Order#: 10 ProductID: 709 Quantity: 6 Price: 5.7000
Header#: 43659 Order#: 11 ProductID: 712 Quantity: 2 Price: 5.1865
Header#: 43659 Order#: 12 ProductID: 711 Quantity: 4 Price: 20.1865
Vedere anche
Attività
Procedura: definire un modello con una stored procedure (Entity Framework)
Concetti
Modello Sales di AdventureWorks (EDM)
Supporto delle stored procedure (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)