Entity Framework: procedimientos almacenados
Entity Framework le permite utilizar procedimientos almacenados en Entity Data Model en lugar de, o en combinación con, su generación automática de comandos.
Puede utilizar procedimientos almacenados para realizar una lógica predefinida en las tablas de la base de datos, y muchas organizaciones tienen políticas que requieren el uso de estos procedimientos almacenados.
También puede especificar que EF debe usar sus procedimientos almacenados para insertar, actualizar o eliminar entidades.
Aunque los comandos construidos dinámicamente son seguros, eficientes y, en general, tan buenos o mejores que los que puede escribir usted mismo, hay muchos casos en los que ya existen procedimientos almacenados y las prácticas de su empresa pueden restringir el uso directo de las tablas.
Alternativamente, es posible que desee tener un control explícito sobre lo que se ejecuta en la tienda y prefiera crear procedimientos almacenados.
El siguiente ejemplo crea un nuevo proyecto desde Archivo → Nuevo → Proyecto.
Step 1 - Seleccione la Aplicación de consola en el panel central e ingrese StoredProceduresDemo en el campo de nombre.
Step 2 - En el Explorador de servidores, haga clic con el botón derecho en su base de datos.
Step 3 - Seleccione Nueva consulta e ingrese el siguiente código en el editor T-SQL para agregar una nueva tabla en su base de datos.
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 - Haga clic con el botón derecho en el editor y seleccione Ejecutar.
Step 5- Haga clic derecho en su base de datos y haga clic en actualizar. Verá la tabla recién agregada en su base de datos.
Step 6 - En el Explorador de servidores, haga clic derecho en su base de datos nuevamente.
Step 7 - Seleccione Nueva consulta e ingrese el siguiente código en el editor T-SQL para agregar un procedimiento almacenado en su base de datos, que devolverá las calificaciones del Estudiante.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[GetStudentGrades]') AND type in (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
Step 8 - Haga clic con el botón derecho en el editor y seleccione Ejecutar.
Step 9- Haga clic derecho en su base de datos y haga clic en actualizar. Verá que se crea un procedimiento almacenado en su base de datos.
Step 10 - Haga clic con el botón derecho en el nombre del proyecto en el Explorador de soluciones y seleccione Agregar → Nuevo elemento.
Step 11 - Luego, seleccione Modelo de datos de entidad ADO.NET en el panel Plantillas.
Step 12 - Ingrese SPModel como nombre y luego haga clic en Agregar.
Step 13 - En el cuadro de diálogo Elegir contenido del modelo, seleccione Diseñador EF de la base de datos y luego haga clic en Siguiente.
Step 14 - Seleccione su base de datos y haga clic en Siguiente.
Step 15 - En el cuadro de diálogo Choose Your Database Objects, haga clic en tablas, vistas.
Step 16 - Seleccione la función GetStudentGradesForCourse ubicada en el nodo Procedimientos y funciones almacenados y haga clic en Finalizar.
Step 17 - Seleccione Ver → Otras ventanas → Explorador de modelos de datos de entidades y haga clic con el botón derecho en GetStudentGrades en Importaciones de funciones y seleccione Editar.
Producirá el siguiente diálogo.
Step 18 - Haga clic en el botón de opción Entidades y seleccione StudentGrade en el cuadro combinado como tipo de retorno de este procedimiento almacenado y haga clic en Aceptar.
Echemos un vistazo al siguiente código C # en el que se recuperarán todas las calificaciones pasando la ID del estudiante como parámetro 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 student in studentGrades) {
Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ",
student.CourseID, student.Course.Title, student.Grade);
}
Console.ReadKey();
}
}
}
Cuando se compile y ejecute el código anterior, recibirá el siguiente resultado:
Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50
Le recomendamos que ejecute el ejemplo anterior paso a paso para una mejor comprensión.