Condividi tramite


Procedura: definire un modello con 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. Nell'esempio in questo argomento vengono forniti gli elementi di base della sintassi dello schema necessari per il mapping di una stored procedure a un'implementazione di EDM (Entity Data Model). La stored procedure può quindi essere chiamata dal codice in un'applicazione che utilizza il modello di dati.

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 si basano 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).

Il modello Sales di AdventureWorks definisce cinque entità:

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

Gli script di database e gli estratti di schema seguenti sono utilizzati per implementare una stored procedure che restituisce i dati contenuti nelle tabelle SalesOrderDetail correlate a un singolo oggetto SalesOrderHeader. L'associazione FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID nel modello Sales può essere utilizzata per la stessa funzione illustrata in questo esempio.

Per creare la stored procedure nel database

  • Utilizzare SQL Server Management Studio o la sintassi dei comandi di query per eseguire il comando di query seguente, che implementa la stored procedure nel database AdventureWorks.

    USE [AdventureWorks]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF OBJECT_ID ( 'dbo.GetOrderDetails', 'P' ) IS NOT NULL 
        DROP PROCEDURE dbo.GetOrderDetails;
    GO
    
    CREATE PROCEDURE [dbo].[GetOrderDetails] 
       @SalesOrderHeaderId int 
    AS
        SELECT SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber,
         OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount,
         rowguid, ModifiedDate, LineTotal
       FROM Sales.SalesOrderDetail
    WHERE SalesOrderID = @SalesOrderHeaderId;
    

Per implementare i requisiti SSDL (Store Schema Definition Language)

  1. Aprire il file SSDL.

  2. Aggiungere la sintassi delle funzioni seguente nei tag dello schema ma non nei tag di EntityContainer.

<Function Name="GetOrderDetails" Aggregate="false" 
    BuiltIn="false" NiladicFunction="false" 
    IsComposable="false" 
    ParameterTypeSemantics="AllowImplicitConversion" 
    Schema="dbo">
        <Parameter Name="SalesOrderHeaderId" Type="int" Mode="In" />
</Function>

Per implementare i requisiti CSDL (Conceptual Schema Definition Language)

  1. Aprire il file CSDL.

  2. Aggiungere l'oggetto FunctionImport seguente all'oggetto EntityContainer del segmento CSDL.

    <FunctionImport Name="GetOrderDetails"
        EntitySet="SalesOrderDetail"
        ReturnType="Collection(AdventureWorksModel.SalesOrderDetail)">
      <Parameter Name="SalesOrderHeaderId" Type="Int32" Mode="In">
      </Parameter>
    </FunctionImport>
    

Implementare i requisiti MSL (Mapping Specification Language)

  1. Aprire il file.

  2. Aggiungere la sintassi EntityContainerMapping seguente:

    <FunctionImportMapping FunctionImportName="GetOrderDetails"
      FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
    
  3. Ricompilare il modello.

Vedere anche

Attività

Procedura: eseguire una query utilizzando una stored procedure (Entity Framework)

Concetti

Supporto delle stored procedure (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)