Gewusst wie: Definieren eines Modells mit einer gespeicherten Prozedur (Entity Framework)
Eine gespeicherte Prozedur, die in einer Datenbank definiert ist, kann in einem konzeptionellen Modell auf zwei Arten verfügbar gemacht werden:
Sie können im konzeptionellen Modell einen Funktionsimport erstellen, der einer gespeicherten Prozedur zugeordnet wird. Dadurch können Sie eine Methode für ObjectContext definieren, damit die gespeicherte Prozedur in der Datenbank ausgeführt wird. Abhängig von der Definition der gespeicherten Prozedur kann der entsprechende Funktionsimport Entitätstypen oder komplexe Typen zurückgeben.
Gespeicherten Prozeduren können Einfüge-, Aktualisierungs- und Löschvorgänge eines Entitätstyps zugeordnet werden. Auf diese Weise können Sie ein benutzerdefiniertes Einfüge-, Aktualisierungs- und Löschverhalten für Entitätstypen definieren.
Hinweis: Wenn Sie nicht alle drei Einfüge-, Aktualisierungs- und Löschvorgänge eines Entitätstyps gespeicherten Prozeduren zuordnen, schlagen die nicht zugeordneten Vorgänge bei der Ausführung zur Laufzeit fehl, und UpdateException wird ausgelöst.
In diesem Thema wird beschrieben, wie ein Funktionsimport in einem konzeptionellen Modell erstellt wird, der in der Datenbank einer gespeicherten Prozedur zugeordnet wird. Weitere Informationen zum Zuordnen von Einfüge-, Aktualisierungs- und Löschvorgängen von Entitätstypen zu gespeicherten Prozeduren finden Sie unter Gewusst wie: Definieren eines Modells mit gespeicherten Prozeduren für Änderungen (Entity Framework).
Beim Erstellen eines Funktionsimports, der einer gespeicherten Prozedur zugeordnet wird, empfiehlt sich die Verwendung von ADO.NET Entity Data Model Tools. Weitere Informationen zur Verwendung der Entity Data Model-Tools finden Sie in den folgenden Themen:
Um einen Funktionsimport zu erstellen, der einer gespeicherten Prozedur zugeordnet wird, können Sie zudem die Modell- und Zuordnungsdateien manuell bearbeiten. Das Beispiel in diesem Thema veranschaulicht die entsprechende Vorgehensweise. Es beruht auf der Beispieldatenbank "School" und dem Modell "School". Informationen zum Generieren des Modells "School" aus der Datenbank "School" finden Sie unter EDM-Generator (EdmGen.exe). Sofern Sie in der Datenbank eine gespeicherte Prozedur definiert haben, finden Sie im Folgenden die grundlegenden Schritte zum Erstellen eines Funktionsimports, der der gespeicherten Prozedur zugeordnet wird:
Fügen Sie dem Speichermodell, das die gespeicherte Prozedur in der Datenbank angibt, ein Function-Element hinzu.
Fügen Sie dem konzeptionellen Modell, das den Funktionsimport im konzeptionellen Modell angibt, ein FunctionImport-Element hinzu.
Fügen Sie der Zuordnungsdatei, die der Funktion des Speichermodells den Funktionsimport des konzeptionellen Modells zuordnet, ein FunctionImportMapping-Element hinzu.
Die Prozeduren in diesem Thema beschreiben, wie die Elemente Function, FunctionImport und FunctionImportMapping erstellt werden, um die folgende gespeicherte Prozedur in das konzeptionelle Modell zu importieren:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[GetStudentGrades]
@StudentID int
AS
SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
WHERE StudentID = @StudentID
'
END
GO
So fügen Sie dem Speichermodell ein Function-Element hinzu
Öffnen Sie das Speichermodell (die SSDL-Datei).
Fügen Sie das folgende Function-Element als untergeordnetes Element des Schema-Elements hinzu:
<Function Name="GetStudentGrades" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"> <Parameter Name="StudentID" Type="int" Mode="In" /> </Function>
So fügen Sie dem konzeptionellen Modell ein FunctionImport-Modell hinzu
Öffnen Sie das konzeptionelle Modell (die CSDL-Datei).
Fügen Sie das folgende FunctionImport-Element als untergeordnetes Element des EntityContainer-Elements hinzu:
<FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades" ReturnType="Collection(SchoolModel.StudentGrade)"> <Parameter Name="StudentID" Mode="In" Type="Int32" /> </FunctionImport>
So fügen Sie der Zuordnungsdatei ein FunctionImportMapping-Element hinzu
Öffnen Sie die Zuordnungsdatei (die MSL-Datei).
Fügen Sie das folgende FunctionImportMapping-Element als untergeordnetes Element des EntityContainerMapping-Elements hinzu:
<FunctionImportMapping FunctionImportName="GetStudentGrades" FunctionName="SchoolModel.Store.GetStudentGrades" />
Siehe auch
Weitere Ressourcen
Definieren von erweiterten Datenmodellen (Entity Framework-Aufgaben)
How to: Define Custom Functions in the Storage Model
CSDL-, SSDL- und MSL-Spezifikationen