Entity Framework - Fonction table
Dans ce chapitre, apprenons à mapper des fonctions table (TVF) à l'aide d'Entity Framework Designer et à appeler un TVF à partir d'une requête LINQ.
Les TVF ne sont actuellement prises en charge que dans le flux de travail Database First.
Il a été introduit pour la première fois dans Entity Framework version 5.
Pour utiliser les TVF, vous devez cibler .NET Framework 4.5 ou supérieur.
Il est très similaire aux procédures stockées mais avec une différence clé, c'est-à-dire que le résultat d'un TVF est composable. Cela signifie que les résultats d'un TVF peuvent être utilisés dans une requête LINQ alors que les résultats d'une procédure stockée ne le peuvent pas.
Jetons un coup d'œil à l'exemple suivant de création d'un nouveau projet à partir de Fichier → Nouveau → Projet.
![](https://assets.edu.lat/entity_framework/images/create_project.jpg)
Step 1 - Sélectionnez l'application console dans le volet central et entrez TableValuedFunctionDemo dans le champ de nom.
Step 2 - Dans l'explorateur de serveur, cliquez avec le bouton droit sur votre base de données.
![](https://assets.edu.lat/entity_framework/images/explorer_database.jpg)
Step 3 - Sélectionnez Nouvelle requête et entrez le code suivant dans l'éditeur T-SQL pour ajouter une nouvelle table dans votre base de données.
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 - Cliquez avec le bouton droit sur l'éditeur et sélectionnez Exécuter.
![](https://assets.edu.lat/entity_framework/images/select_execute.jpg)
Step 5- Faites un clic droit sur votre base de données et cliquez sur Actualiser. Vous verrez la table nouvellement ajoutée dans votre base de données.
![](https://assets.edu.lat/entity_framework/images/added_table.jpg)
Step 6- Créez maintenant une fonction qui retournera les notes des étudiants pour le cours. Entrez le code suivant dans l'éditeur T-SQL.
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]
(@CourseID INT)
RETURNS TABLE
RETURN
SELECT [EnrollmentID],
[CourseID],
[StudentID],
[Grade]
FROM [dbo].[StudentGrade]
WHERE CourseID = @CourseID
Step 7 - Cliquez avec le bouton droit sur l'éditeur et sélectionnez Exécuter.
![](https://assets.edu.lat/entity_framework/images/editor_select.jpg)
Vous pouvez maintenant voir que la fonction est créée.
![](https://assets.edu.lat/entity_framework/images/function_created.jpg)
Step 8 - Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de solutions et sélectionnez Ajouter → Nouvel élément.
Step 9 - Sélectionnez ensuite ADO.NET Entity Data Model dans le volet Modèles.
![](https://assets.edu.lat/entity_framework/images/entity_template_pane.jpg)
Step 10 - Entrez TVFModel comme nom, puis cliquez sur Ajouter.
Step 11 - Dans la boîte de dialogue Choisir le contenu du modèle, sélectionnez Concepteur EF à partir de la base de données, puis cliquez sur Suivant.
![](https://assets.edu.lat/entity_framework/images/content_dialog_box.jpg)
Step 12 - Sélectionnez votre base de données et cliquez sur Suivant.
![](https://assets.edu.lat/entity_framework/images/select_database.jpg)
Step 13 - Dans la boîte de dialogue Choisissez vos objets de base de données, sélectionnez des tables, des vues.
![](https://assets.edu.lat/entity_framework/images/object_dialog_box.jpg)
Step 14 - Sélectionnez la fonction GetStudentGradesForCourse située sous le nœud Procédures et fonctions stockées et cliquez sur Terminer.
Step 15 - Sélectionnez Affichage → Autres fenêtres → Navigateur de modèles de données d'entité et cliquez avec le bouton droit sur GetStudentGradesForCourse sous Importations de fonctions et sélectionnez Modifier.
![](https://assets.edu.lat/entity_framework/images/select_view.jpg)
Vous verrez la boîte de dialogue suivante.
![](https://assets.edu.lat/entity_framework/images/dialog.jpg)
Step 16 - Cliquez sur le bouton radio Entités et sélectionnez Inscription dans la liste déroulante comme type de retour de cette fonction et cliquez sur OK.
Jetons un coup d'œil au code C # suivant dans lequel toutes les notes des étudiants inscrits au cours ID = 4022 dans la base de données seront récupérées.
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();
}
}
}
Lorsque le code ci-dessus est compilé et exécuté, vous recevrez la sortie suivante -
Student ID: 1, Grade: 2
Student ID: 4, Grade: 4
Student ID: 9, Grade: 3.5
Nous vous recommandons d'exécuter l'exemple ci-dessus étape par étape pour une meilleure compréhension.