Entity Framework - Procedimientos almacenados
Entity Framework le permite usar procedimientos almacenados en el modelo de data de entidad en su lugar o en combinacion con su generacion automatica de comandos.
-
Puede utilizar procedimientos almacenados para realizar una logica predefinida en las tablas de la base de data, y muchas organizaciones tienen politicas que requieren la 'uso de estos procedimientos almacenados.
-
Tambien puede especificar que EF debe usar sus procedimientos almacenados para insertar, actualizar o eliminar entidades.
-
Si bien los comandos construidos dinamicamente son seguros, eficientes y, en general, tan buenos o mejores que los que puede escribir usted mismo, hay muchos casos en los que existen procedimientos almacenados. ya y sus practicas comerciales pueden restringir el uso de la mesa.
-
Alternativamente, es posible que desee tener un control explicito sobre lo que se ejecuta en la tienda y prefiera crear procedimientos almacenados.
El siguiente ejemplo crea un nuevo proyecto desde Archivo → Nuevo → Proyecto.
Paso 1 - Seleccione la aplicacion de consola en el panel central e ingrese StoredProceduresDemo en el campo de nombre.
Paso 2 - En Server Explorer, haga clic derecho en su base de data.
Paso 3 : seleccione Nueva consulta e ingrese el siguiente codigo en el editor T-SQL para agregar una nueva tabla en su base de data.
SI NO EXISTE (SELECCIONE * FROM sys.objects DONDE object_id = OBJECT_ID (N '[dbo]. [StudentGrade] ') Y escriba (N 'U ')) BEGIN CREAR TABLA [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] CLAVE PRINCIPAL AGRUPADA ([EnrollmentID] ASC) CON (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY] END GO
Paso 4 : haga clic con el boton 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 : en el Explorador de servidores, haga clic con el boton derecho en su base de data nuevamente.
Paso 7 : seleccione Nueva consulta e introduzcala siguiendo el codigo en el editor T-SQL para agregar un procedimiento almacenado a su base de data, que devolvera las calificaciones de los estudiantes.
SI NO EXISTE (SELECCIONE * FROM sys.objects DONDE object_id = OBJECT_ID (N '[dbo]. [GetStudentGrades] ') Y escriba (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
Paso 8 : haz clic derecho en el editor y selecciona Ejecutar.
Paso 9 - Haga clic derecho en su base de data y haga clic en Actualizar. Vera que se crea un procedimiento almacenado en su base de data.
Paso 10 - Haga clic con el boton derecho en el nombre del proyecto en el Explorador de soluciones y seleccione Agregar → Nuevo elemento.
Paso 11 : luego seleccione Datos de entidad ADO.NETModelo en el panel Plantillas.
Paso 12 : ingrese SPModel como nombre, luego haga clic en Agregar.
Paso 13 : en el cuadro de dialogo Elegir contenido del modelo, seleccione el disenador EF para de la base de data, luego haga clic en Siguiente.
Paso 14 : seleccione su base de data y haga clic en Siguiente.
Paso 15 - En el cuadro de dialogo Choose your base objects data, haga clic en tablas, vistas.
Paso 16 : seleccione la funcion GetStudentGradesForCourse ubicada debajo del nodo Procedimientos y funciones almacenados y haga clic en Finalizar.
Paso 17 - Selija Ver → Otras ventanas → Modelo de data de entidades de Navigator y haga clic con el boton derecho en GetStudentGrades en Importaciones de caracteristicas y seleccione Editar.
Esto producira el siguiente cuadro de dialogo.
Paso 18 : haga clic en el boton de opcion Entidades y seleccione StudentGrade de la lista desplegable como el tipo de retorno de este procedimiento almacenado y haga clic en Ok.
Echemos un vistazo al siguiente codigo C # donde se recuperaran todas las calificaciones al pasar la identificacion del estudiante como parametro en el procedimiento almacenado GetStudentGrades.
class Program {static void Main (string args) {using (var context = new UniContextEntities ()) {int StudentID = 22; var studentGrades = context.GetStudentGrades (studentID); foreach(var estudiante en studentGrades) {Console.WriteLine ( "ID del curso: {0}, Titulo: {1}, Grado: {2} ", student.CourseID, student.Course.Title, student.Grade); } Console.ReadKey }}}
Cuando se compila y ejecuta el codigo anterior, recibira el siguiente resultado:
ID del curso: 4022, Titulo: Microeconomia, calificacion: 3.00 ID del curso: 4041, titulo: Macroeconomia, calificacion: 3.50
Le recomendamos que ejecute el ejemplo anterior paso a paso para una mejor comprension.