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
Öffnen Sie die SSDL-Datei.
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
Öffnen Sie die CSDL-Datei.
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
Öffnen Sie die Datei.
Fügen Sie die folgende EntityContainerMapping-Syntax hinzu.
<FunctionImportMapping FunctionImportName="GetOrderDetails" FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
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)