Condividi tramite


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 FunctionImportGetOrderDetailsnello 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

  1. Creare un'applicazione console.

  2. Aggiungere un riferimento alla DLL implementata nell'argomento Procedura: definire un modello con una stored procedure (Entity Framework).

  3. Aggiungere riferimenti a System.Data.Entity e System.Runtime.Serialization.

  4. 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)