Table-Valued Funktionen (TVFs)Table-Valued Functions (TVFs)

Hinweis

Nur EF5 : die Features, APIs usw., die auf dieser Seite erläutert wurden, wurden in Entity Framework 5 eingeführt.EF5 Onwards Only - The features, APIs, etc. discussed in this page were introduced in Entity Framework 5. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.If you are using an earlier version, some or all of the information does not apply.

Das Video und die schrittweise exemplarische Vorgehensweise zeigen, wie Sie Tabellenwert Funktionen (TVFs) mithilfe der Entity Framework Designer zuordnen.The video and step-by-step walkthrough shows how to map table-valued functions (TVFs) using the Entity Framework Designer. Außerdem wird veranschaulicht, wie eine TVF aus einer LINQ-Abfrage aufgerufen wird.It also demonstrates how to call a TVF from a LINQ query.

TVFs werden derzeit nur im Database First Workflow unterstützt.TVFs are currently only supported in the Database First workflow.

Die TVF-Unterstützung wurde in Entity Framework Version 5 eingeführt.TVF support was introduced in Entity Framework version 5. Beachten Sie, dass Sie für die Verwendung der neuen Features wie Tabellenwert Funktionen, Enumerationstypen und räumlichen Typen auf .NET Framework 4,5 abzielen müssen.Note that to use the new features like table-valued functions, enums, and spatial types you must target .NET Framework 4.5. Visual Studio 2012 hat standardmäßig .NET 4,5 als Ziel.Visual Studio 2012 targets .NET 4.5 by default.

TVFs ähneln gespeicherten Prozeduren mit einem wichtigen Unterschied: das Ergebnis einer TVF ist zusammensetzbar.TVFs are very similar to stored procedures with one key difference: the result of a TVF is composable. Dies bedeutet, dass die Ergebnisse einer TVF in einer LINQ-Abfrage verwendet werden können, während die Ergebnisse einer gespeicherten Prozedur dies nicht möglich sind.That means the results from a TVF can be used in a LINQ query while the results of a stored procedure cannot.

Video ansehenWatch the video

Präsentiert von: Julia kornichPresented By: Julia Kornich

WMV | MP4 | WMV (zip)WMV | MP4 | WMV (ZIP)

VoraussetzungenPre-Requisites

Um diese exemplarische Vorgehensweise durchführen zu können, benötigen Sie Folgendes:To complete this walkthrough, you need to:

Einrichten des ProjektsSet up the Project

  1. Öffnen Sie Visual Studio.Open Visual Studio
  2. Zeigen Sie im Menü Datei auf neu, und klicken Sie dann auf Projekt .On the File menu, point to New, and then click Project
  3. Klicken Sie im linken Bereich auf **Visual C # **, und wählen Sie dann die Konsolen Vorlage aus.In the left pane, click Visual C#, and then select the Console template
  4. Geben Sie TVF als Namen für das Projekt ein, und klicken Sie auf OK .Enter TVF as the name of the project and click OK

Hinzufügen einer TVF zur DatenbankAdd a TVF to the Database

  • Wählen Sie Ansicht- > SQL Server-Objekt-ExplorerSelect View -> SQL Server Object Explorer
  • Wenn localdb nicht in der Liste der Server enthalten ist, klicken Sie mit der rechten Maustaste auf SQL Server , und wählen Sie hinzu SQL Server fügen aus, um die Verbindung zum localdb-Server mithilfe der Windows-Standard Authentifizierung herzustellenIf LocalDB is not in the list of servers: Right-click on SQL Server and select Add SQL Server Use the default Windows Authentication to connect to the LocalDB server
  • Erweitern Sie den Knoten localdb.Expand the LocalDB node
  • Klicken Sie unter dem Knoten Datenbanken mit der rechten Maustaste auf den Datenbankknoten School, und wählen Sie neue Abfrage aus.Under the Databases node, right-click the School database node and select New Query…
  • Fügen Sie im T-SQL-Editor die folgende TVF-Definition ein.In T-SQL Editor, paste the following TVF definition
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]

(@CourseID INT)

RETURNS TABLE

RETURN
    SELECT [EnrollmentID],
           [CourseID],
           [StudentID],
           [Grade]
    FROM   [dbo].[StudentGrade]
    WHERE  CourseID = @CourseID
  • Klicken Sie mit der rechten Maustaste auf den T-SQL-Editor, und wählen Sie Ausführen aus.Click the right mouse button on the T-SQL editor and select Execute
  • Die Funktion "getstudentgradesforcourse" wird der Datenbank "School" hinzugefügt.The GetStudentGradesForCourse function is added to the School database

 

ModellerstellungCreate a Model

  1. Klicken Sie mit der rechten Maustaste auf den Projektnamen Projektmappen-Explorer, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues ElementRight-click the project name in Solution Explorer, point to Add, and then click New Item
  2. Wählen Sie im linken Menü Daten aus, und wählen Sie dann im Bereich Vorlagen die Option ADO.NET Entity Data Model aus.Select Data from the left menu and then select ADO.NET Entity Data Model in the Templates pane
  3. Geben Sie als Dateiname tvfmodel. edmx ein, und klicken Sie dann auf Hinzufügen .Enter TVFModel.edmx for the file name, and then click Add
  4. Wählen Sie im Dialogfeld Modell Inhalte auswählen die Option aus Datenbank generieren aus, und klicken Sie dann auf weiter .In the Choose Model Contents dialog box, select Generate from database, and then click Next
  5. Klicken Sie auf neue Verbindung eingeben (localdb) \ mssqllocaldb im Textfeld Server Name geben Sie School   für den Datenbanknamen ein, klicken Sie auf OK .Click New Connection Enter (localdb)\mssqllocaldb in the Server name text box Enter School for the database name Click OK
  6. Wählen Sie im Dialogfeld Datenbankobjekte auswählen unter dem Knoten Tabellen   die Tabellen PersonStudentGradeund Courseaus.  In the Choose Your Database Objects dialog box, under the Tables node, select the PersonStudentGrade, and Course tables
  7. Wählen Sie im Knoten " gespeicherte Prozeduren und Funktionen" die Funktion " getstudentgradesforcourse " aus   , die mit der Entity Designer ab Visual Studio 2012 das Batch importieren gespeicherter Prozeduren und Funktionen ermöglicht.Select the GetStudentGradesForCourse function located under the Stored Procedures and Functions node Note, that starting with Visual Studio 2012, the Entity Designer allows you to batch import your Stored Procedures and Functions
  8. Klicken auf Fertig stellenClick Finish
  9. Die Entity Designer, die eine Entwurfs Oberfläche zum Bearbeiten des Modells bereitstellt, wird angezeigt.The Entity Designer, which provides a design surface for editing your model, is displayed. Alle Objekte, die Sie im Dialogfeld Wählen Sie Ihre Datenbankobjekteausgewählt   haben, werden dem Modell hinzugefügt.All the objects that you selected in the Choose Your Database Objects dialog box are added to the model.
  10. Standardmäßig wird die Ergebnis Form der einzelnen importierten gespeicherten Prozeduren oder Funktionen automatisch zu einem neuen komplexen Typ im Entitäts Modell.By default, the result shape of each imported stored procedure or function will automatically become a new complex type in your entity model. Wir möchten jedoch die Ergebnisse der Funktion "getstudentgradesforcourse" der Entität "StudentGrade" zuordnen: Klicken Sie mit der rechten Maustaste auf die Entwurfs Oberfläche, und wählen Sie " Modell Browser " im Modell Browser aus. Wählen Sie " Funktions Importe" aus , und Doppelklicken Sie dann im Dialogfeld Funktions Import bearbeiten auf die Funktion " getstudentgradesforcourse ".    StudentGradeBut we want to map the results of the GetStudentGradesForCourse function to the StudentGrade entity: Right-click the design surface and select Model Browser In Model Browser, select Function Imports, and then double-click the GetStudentGradesForCourse function In the Edit Function Import dialog box, select Entities and choose StudentGrade

Persistenz und Abrufen von DatenPersist and Retrieve Data

Öffnen Sie die Datei, in der die Main-Methode definiert ist.Open the file where the Main method is defined. Fügen Sie der Main-Funktion den folgenden Code hinzu.Add the following code into the Main function.

Der folgende Code veranschaulicht, wie eine Abfrage erstellt wird, die eine Tabellenwert Funktion verwendet.The following code demonstrates how to build a query that uses a Table-valued Function. Die Abfrage projiziert die Ergebnisse in einen anonymen Typ, der den zugehörigen Kurs Titel und verwandte Studenten mit einem Wert größer oder gleich 3,5 enthält.The query projects the results into an anonymous type that contains the related Course title and related students with a grade greater or equal to 3.5.

using (var context = new SchoolEntities())
{
    var CourseID = 4022;
    var Grade = 3.5M;

    // Return all the best students in the Microeconomics class.
    var students = from s in context.GetStudentGradesForCourse(CourseID)
                            where s.Grade >= Grade
                            select new
                            {
                                s.Person,
                                s.Course.Title
                            };

    foreach (var result in students)
    {
        Console.WriteLine(
            "Couse: {0}, Student: {1} {2}",
            result.Title,  
            result.Person.FirstName,  
            result.Person.LastName);
    }
}

Kompilieren Sie die Anwendung, und führen Sie sie aus.Compile and run the application. Das Programm erzeugt die folgende Ausgabe:The program produces the following output:

Couse: Microeconomics, Student: Arturo Anand
Couse: Microeconomics, Student: Carson Bryant

ZusammenfassungSummary

In dieser exemplarischen Vorgehensweise wird erläutert, wie Tabellenwert Funktionen (TVFs) mithilfe der Entity Framework Designer zugeordnet werden.In this walkthrough we looked at how to map Table-valued Functions (TVFs) using the Entity Framework Designer. Außerdem wurde veranschaulicht, wie eine TVF aus einer LINQ-Abfrage aufgerufen wird.It also demonstrated how to call a TVF from a LINQ query.