Freigeben über


Gewusst wie: Definieren eines Modells mit einer gespeicherten Prozedur (Entity Framework)

Viele Anwendungsentwickler und Datenbankadministratoren verwenden gespeicherte Prozeduren, um die Sicherheit zu erhöhen, Vorhersagbarkeit zu erreichen und Datenlogik in der Datenbank zu kapseln. Das Beispiel in diesem Thema zeigt die grundlegenden Elemente der Schemasyntax, die für die Zuordnung einer gespeicherten Prozedur zu einer Implementierung des Entity Data Model (EDM) erforderlich ist. Die gespeicherte Prozedur kann dann von Code in einer Anwendung aufgerufen werden, die das Datenmodell verwendet.

Das EDM unterstützt zwei Mappingmethoden für gespeicherte Prozeduren. Weitere Informationen über das Mapping von gespeicherten Prozeduren für die Datenaktualisierung finden Sie unter Unterstützung für gespeicherte Prozeduren (Entity Framework).

Die Beispiele in diesem Thema basieren auf dem AdventureWorks Sales-Modell. Zum Ausführen des Codes in diesem Beispiel müssen Sie dem Projekt bereits das "AdventureWorks Sales"-Modell hinzugefügt und das Projekt zur Verwendung des Entity Framework konfiguriert haben. Führen Sie dazu die Verfahren unter Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework) durch.

Das AdventureWorks Sales-Modell definiert fünf Entitäten:

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

Die folgenden Datenbankskripts und Schemaauszüge werden zum Implementieren einer gespeicherten Prozedur verwendet, die die in den SalesOrderDetail-Tabellen enthaltenen, mit einem einzelnen SalesOrderHeader verknüpften Daten zurückgibt. (Die FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID-Zuordnung im Sales-Modell verfügt über die gleiche Funktion wie dieses Beispiel.)

So erstellen Sie die gespeicherte Prozedur in der Datenbank

  • Verwenden Sie SQL Server Management Studio oder Abfragebefehlssyntax, um mit folgendem Abfragebefehl die gespeicherte Prozedur in der AdventureWorks-Datenbank zu implementieren.

    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;
    

So implementieren Sie die SSDL-Anforderungen

  1. Öffnen Sie die SSDL-Datei.

  2. Fügen Sie die folgende Funktionssyntax innerhalb der Schematags, jedoch nicht innerhalb der EntityContainer-Tags hinzu.

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

So implementieren Sie die CSDL-Anforderungen

  1. Öffnen Sie die CSDL-Datei.

  2. Fügen Sie den folgenden FunctionImport dem EntityContainer des CSDL-Segments hinzu.

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

Implementieren der MSL-Anforderungen

  1. Öffnen Sie die Datei.

  2. Fügen Sie die folgende EntityContainerMapping-Syntax hinzu.

    <FunctionImportMapping FunctionImportName="GetOrderDetails"
      FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
    
  3. Erstellen Sie das Modell neu.

Siehe auch

Aufgaben

Gewusst wie: Ausführen einer Abfrage mithilfe einer gespeicherten Prozedur (Entity Framework)

Konzepte

Unterstützung für gespeicherte Prozeduren (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)