Entity Framework - Tabellenwertfunktion
In diesem Kapitel erfahren Sie, wie Sie Tabellenwertfunktionen (TVFs) mit dem Entity Framework Designer zuordnen und eine TVF aus einer LINQ-Abfrage aufrufen.
TVFs werden derzeit nur im Database First-Workflow unterstützt.
Es wurde erstmals in Entity Framework Version 5 eingeführt.
Um die TVFs verwenden zu können, müssen Sie auf .NET Framework 4.5 oder höher abzielen.
Es ist gespeicherten Prozeduren sehr ähnlich, aber mit einem wesentlichen Unterschied, dh das Ergebnis einer TVF ist zusammensetzbar. Dies bedeutet, dass die Ergebnisse einer TVF in einer LINQ-Abfrage verwendet werden können, während die Ergebnisse einer gespeicherten Prozedur dies nicht können.
Schauen wir uns das folgende Beispiel zum Erstellen eines neuen Projekts über Datei → Neu → Projekt an.
Step 1 - Wählen Sie die Konsolenanwendung im mittleren Bereich aus und geben Sie TableValuedFunctionDemo in das Namensfeld ein.
Step 2 - Klicken Sie im Server Explorer mit der rechten Maustaste auf Ihre Datenbank.
Step 3 - Wählen Sie Neue Abfrage und geben Sie den folgenden Code in den T-SQL-Editor ein, um eine neue Tabelle in Ihre Datenbank aufzunehmen.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[StudentGrade](
[EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
[CourseID] [int] NOT NULL,
[StudentID] [int] NOT NULL,
[Grade] [decimal](3, 2) NULL,
CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED ([EnrollmentID] ASC)
WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
Step 4 - Klicken Sie mit der rechten Maustaste auf den Editor und wählen Sie Ausführen.
Step 5- Klicken Sie mit der rechten Maustaste auf Ihre Datenbank und klicken Sie auf Aktualisieren. Sie sehen die neu hinzugefügte Tabelle in Ihrer Datenbank.
Step 6- Erstellen Sie nun eine Funktion, die die Noten der Schüler für den Kurs zurückgibt. Geben Sie den folgenden Code in den T-SQL-Editor ein.
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]
(@CourseID INT)
RETURNS TABLE
RETURN
SELECT [EnrollmentID],
[CourseID],
[StudentID],
[Grade]
FROM [dbo].[StudentGrade]
WHERE CourseID = @CourseID
Step 7 - Klicken Sie mit der rechten Maustaste auf den Editor und wählen Sie Ausführen.
Jetzt können Sie sehen, dass die Funktion erstellt wurde.
Step 8 - Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen und wählen Sie Hinzufügen → Neues Element.
Step 9 - Wählen Sie dann im Bereich Vorlagen die Option ADO.NET-Entitätsdatenmodell aus.
Step 10 - Geben Sie TVFModel als Namen ein und klicken Sie dann auf Hinzufügen.
Step 11 - Wählen Sie im Dialogfeld Modellinhalt auswählen die Option EF-Designer aus der Datenbank aus und klicken Sie dann auf Weiter.
Step 12 - Wählen Sie Ihre Datenbank aus und klicken Sie auf Weiter.
Step 13 - Wählen Sie im Dialogfeld Datenbankobjekte auswählen Tabellen und Ansichten aus.
Step 14 - Wählen Sie die Funktion GetStudentGradesForCourse unter dem Knoten Gespeicherte Prozeduren und Funktionen aus und klicken Sie auf Fertig stellen.
Step 15 - Wählen Sie Ansicht → Andere Fenster → Browser für Entitätsdatenmodelle, klicken Sie mit der rechten Maustaste auf GetStudentGradesForCourse unter Funktionsimporte und wählen Sie Bearbeiten.
Sie sehen den folgenden Dialog.
Step 16 - Klicken Sie auf das Optionsfeld Entitäten, wählen Sie in der Combobox die Option Registrierung als Rückgabetyp für diese Funktion aus und klicken Sie auf OK.
Werfen wir einen Blick auf den folgenden C # -Code, in dem alle Noten der Schüler abgerufen werden, die in der Datenbank mit der Kurs-ID = 4022 eingeschrieben sind.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
var CourseID = 4022;
// Return all the best students in the Microeconomics class.
var students = context.GetStudentGradesForCourse(CourseID);
foreach (var result in students) {
Console.WriteLine("Student ID: {0}, Grade: {1}",
result.StudentID, result.Grade);
}
Console.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, erhalten Sie die folgende Ausgabe:
Student ID: 1, Grade: 2
Student ID: 4, Grade: 4
Student ID: 9, Grade: 3.5
Wir empfehlen, dass Sie das obige Beispiel zum besseren Verständnis Schritt für Schritt ausführen.