Entity Framework - Funcion con valores de tabla
En este capitulo, aprendamos a mapear funciones con valores de tabla (TVF) utilizando Entity Framework Designer y como llamar un TVF de una consulta LINQ.
-
Actualmente, TVF solo es compatible con el flujo de trabajo Database First.
-
Se introdujo por primera vez en la version 5 de Entity Framework.
-
Para utilizar TVF, debe apuntar .NET Framework 4.5 o superior.
-
Esto es muy similar a los procedimientos almacenados pero con una diferencia clave, es decir, el resultado de un TVF es componible. Esto significa que los resultados de un TVF se pueden usar en una consulta LINQ, mientras que los resultados de un procedimiento almacenado no.
Echemos un vistazo al siguiente ejemplo de como crear un nuevo proyecto desde Archivo → Nuevo → Proyecto.
Paso 1 - Sseleccione la aplicacion de consola en el panel central e ingrese TableValuedFunctionDemo en el campo de nombre.
Paso 2 : en el Explorador de servidores, haga clic derecho en su base de data.
Paso 3 : seleccione Nueva solicitud e ingrese el siguiente codigo en el editor T-SQL para agregar una nueva tabla en su base de data.
SI NO EXISTE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID (N '[dbo]. [StudentGrade] ') Y escriba (N 'U ')) BEGIN CREATE TABLE [dbo]. [StudentGrade] ([Enrollm entID] [int] IDENTITY (1,1) NOT NULL, [CourseID] [int] NOT NULL, [StudentID] [int] NOT NULL, [Grade] [decimal] (3, 2) NULL, CONSTRAINT [PK_StudentGrade] CLUSTER PRINCIPAL ([EnrollmentID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY] END GO
Paso 4 : haga clic derecho en el editor y seleccione Ejecutar.
Paso 5 - Haga clic derecho en su base de data y haga clic en Actualizar. Vera la tabla recien agregada en su base de data.
Paso 6 : ahora cree una funcion que devuelva las calificaciones de los estudiantes para el curso. Ingrese el siguiente codigo en el editor T-SQL.
CREAR FUNCIÓN [dbo]. [GetStudentGradesForCourse] (@CourseID INT) TABLA DE DEVOLUCIONES VOLVER SELECCIONAR [EnrollmentID], [CourseID], [StudentID], [Grade] FROM [dbo]. [StudentGrade] DONDE CourseID = @CourseID
Paso 7 : haga clic derecho en el editor y seleccione Ejecutar.
Ahora puede ver que la funcion esta creada.
Paso 8 : haga clic con el boton derecho en el nombre del proyecto en el Explorador de soluciones y seleccione Agregar → Nuevo elemento.
Paso 9 : luego seleccione ADO. NET Entity Data Model en el panel Plantillas.
Paso 10 : ingrese TVFModel como nombre y luego haga clic en Agregar.
Paso 11 - En el cuadro de dialogo Choose Model Content, seleccione el disenador EF de la base de data, luego haga clic en Next.
Paso 12 - Seleccione su base de data y haga clic en Siguiente.
Paso 13 : en el cuadro de dialogo Choose your objects from base de data, seleccionar tablas, vistas.
Paso 14 : seleccione la funcion GetStudentGradesForCourse ubicada debajo de los procedimientos almacenados y el nodo Funciones y haga clic en Finalizar.
Paso 15 - Seleccione Ver → Otras ventanas → Navegador de modelos de data de entidades y haga clic con el boton derecho en GetStudentGradesForCourse en Importaciones funciones y seleccione Modificar.
Ves el cuadro desiguiente dialogo.
Paso 16 : haga clic en el boton de opcion Entidades y seleccione Inion de la lista desplegable como el tipo de retorno de esta funcion y haga clic en Aceptar.
Echemos un vistazo al siguiente codigo C # en el que se buscaran todos los estudiantes inscritos en el curso ID = 4022 en la base de data.
class program {sta tic void Main (string args) {using (var context = new UniContextEntities ()) {var CourseID = 4022; // Devuelve todos los mejores estudiantes de la class de Microeconomia. var estudiantes = context.GetStudentGradesForCourse (CourseID); foreach (var resultado en Estudiantes) {Console.WriteLine ( "Student ID: {0}, Grade: {1} ", result.StudentID, result.Grade);} Console .ReadKey }}}
Cuando se compile y ejecute el codigo anterior, recibira el siguiente resultado:
ID de estudiante: 1, Grado: 2 Identificacion del estudiante: 4, Grado: 4 Student ID: 9, Grado: 3.5
Le recomendamos que ejecute el ejemplo anterior paso a paso para comprenderlo mejor.