You are on page 1of 24

Facultad de Ingenieras y Arquitectura

Escuela Profesional de Ingeniera de Sistemas e Informtica


LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Sesin Nro. 02-02

Fecha:

Tema: Entity Framework

Ciclo:

Pgina: 1/24

VI

Seccin:
Docentes: Ing. Anbal Sardn Paniagua

Ciclo Acd.

Alumno:

Nota:

2014-1B

OBJETIVOS:
Conocer los conceptos bsicos de Entity Framework.
Descubrir la estructura de Entity Framework.
REQUISITOS:
Sistema Operativo Windows
MS Visual Studio 2010
Pizarra. Plumn, mota

INFORMACIN:
INTRODUCCIN A ENTITY FRAMEWORK
Entity Framework es un conjunto de tecnologas de ADO.NET que permiten el desarrollo de aplicaciones de
software orientadas a datos. Los arquitectos y programadores de aplicaciones orientadas a datos se han
enfrentado a la necesidad de lograr dos objetivos muy diferentes. Deben modelar las entidades, las relaciones y
la lgica de los problemas empresariales que resuelven, y tambin deben trabajar con los motores de datos que
se usan para almacenar y recuperar los datos. Los datos pueden abarcar varios sistemas de almacenamiento,
cada uno con sus propios protocolos; incluso las aplicaciones que funcionan con un nico sistema de
almacenamiento deben equilibrar los requisitos del sistema de almacenamiento con respecto a los requisitos de
escribir un cdigo de aplicacin eficaz y fcil de mantener.
Entity Framework permite a los programadores trabajar con datos en forma de objetos y propiedades especficos
del dominio, por ejemplo, con clientes y direcciones, sin tener que pensar en las tablas de las bases de datos
subyacentes y en las columnas en las que se almacenan estos datos. Para ello, se eleva el nivel de abstraccin
en la que los programadores pueden trabajar al tratar con datos y se reduce el cdigo requerido para crear y
mantener las aplicaciones orientadas a datos.
Dado que Entity Framework es un componente de .NET Framework, las aplicaciones de Entity Framework se
pueden ejecutar en cualquier equipo en que est instalado .NET Framework 3.5 Service Pack 1 (SP1).

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 2/24

1. DAR LA VIDA A LOS MODELOS CONCEPTUALES


Un patrn de diseo antiguo y comn para el modelado de datos es la divisin del modelo en tres partes: un
modelo conceptual, un modelo lgico y un modelo fsico.

El modelo conceptual define las entidades y relaciones del sistema que se est modelando.

El modelo lgico de una base de datos relacional normaliza las entidades y relaciones en tablas con
restricciones de claves externas.

El modelo fsico abarca las capacidades de un motor de datos determinado especificando los detalles
del almacenamiento en forma de particiones e ndices.

Los administradores de bases de datos refinan el modelo fsico para mejorar el rendimiento, pero los
programadores que escriben el cdigo de la aplicacin principalmente se limitan a trabajar con el modelo lgico
escribiendo consultas SQL y llamando a procedimientos almacenados.
Los modelos conceptuales se suelen usar como una herramienta para capturar y comunicar los requisitos de
una aplicacin, con frecuencia como diagramas inertes que se ven y se explican en las primeras etapas de un
proyecto, y a continuacin se abandonan. Muchos equipos de desarrolladores omiten la creacin de un modelo
conceptual y comienzan especificando las tablas, columnas y claves en una base de datos relacional.
Entity Framework da vida a los modelos conceptuales permitiendo a los programadores consultar las entidades y
relaciones en el modelo conceptual al tiempo que se basan en Entity Framework para traducir esas operaciones
en los comandos especficos del origen de datos. Esto libera a las aplicaciones de las dependencias codificadas
de forma rgida en un origen de datos determinado.

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 3/24

El modelo conceptual, el modelo de almacenamiento y la asignacin entre los dos se expresan en una
especificacin externa, conocida como el Entity Data Model (EDM).
El modelo de almacenamiento y las asignaciones pueden cambiar segn sea necesario sin necesidad de
cambiar el modelo conceptual, las clases de datos o el cdigo de la aplicacin. Dado que los modelos de
almacenamiento son especficos del proveedor, puede trabajar con un modelo conceptual coherente a travs de
varios orgenes de datos.
Un EDM se define con los tres modelos y archivos de asignacin siguientes que tienen las extensiones de
nombre de archivo correspondientes:

Archivo de lenguaje de definicin de esquemas conceptuales (.csdl): define el modelo conceptual.

Archivo de lenguaje de definicin de esquemas de almacenamiento (.ssdl): define el modelo de


almacenamiento, que tambin se denomina modelo lgico.

Archivo de lenguaje de especificacin de asignaciones (.msl): define la asignacin entre los modelos
conceptual y de almacenamiento.

Entity Framework utiliza estos modelos y archivos de asignacin basados en XML para transformar las
operaciones de creacin, lectura, actualizacin y eliminacin de las entidades y relaciones del modelo
conceptual en las operaciones equivalentes en el origen de datos. El EDM incluso permite asignar las entidades
del modelo conceptual a los procedimientos almacenados en el origen de datos.

2. ASIGNAR OBJETOS A DATOS


La programacin orientada a objetos supone un desafo al interactuar con sistemas de almacenamiento de
datos. Aunque la organizacin de clases suele reflejar la organizacin de las tablas de bases de datos
relacionales minuciosamente, el ajuste no es perfecto. Varias tablas normalizadas suelen corresponder a una
sola clase y las relaciones entre las clases se representan de forma diferente a las relaciones entre tablas.
Por ejemplo, para representar el cliente de un pedido de ventas, una clase Order utiliza una propiedad que
contiene una referencia a una instancia de una clase Customer, pero una fila de la tabla Order en una base de
datos contiene una columna de clave externa con un valor que corresponde a un valor de clave principal en la
tabla Customer (o conjunto de columnas). Una clase Customer podra tener una propiedad denominada
Orders que contuviera una coleccin de instancias de la clase Order, pero la tabla Customer en una base de
datos no tiene ninguna columna comparable.
Las soluciones existentes han intentado cubrir este hueco, que se suele denominar "desigualdad de
impedancia", asignando nicamente clases y propiedades orientadas a objetos a las tablas y columnas
relacionales.
En lugar de seguir este enfoque tradicional, Entity Framework asigna las tablas relacionales, columnas y

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 4/24

restricciones FOREIGN KEY de los modelos lgicos a las entidades y relaciones de los modelos conceptuales.
Esto permite una mayor flexibilidad al definir los objetos y optimizar el modelo lgico.
Las herramientas de Entity Data Model generan clases de datos extensibles segn el modelo conceptual. Se
trata de clases parciales que se pueden extender con miembros adicionales que el programador agrega. Las
clases que se generan para un modelo conceptual determinado derivan de las clases base que proporcionan
Servicios de objeto para materializar las entidades como objetos y para realizar un seguimiento de los cambios y
guardarlos. Los programadores pueden utilizar estas clases para trabajar con las entidades y relaciones como
objetos relacionados mediante propiedades de navegacin.
3. OBTENER ACCESO A LOS DATOS DE ENTIDAD Y CAMBIARLOS

Como algo ms que otra solucin de asignacin objeto-relacional, Entity Framework trata fundamentalmente de
permitir que las aplicaciones obtengan acceso y cambien los datos que estn representados como entidades y
relaciones en el modelo conceptual. Servicios de objeto usa el EDM para traducir las consultas de objeto con los
tipos de entidad que se representan en el modelo conceptual en consultas especficas del origen de datos. Los
resultados de la consulta se materializan en los objetos que Servicios de objeto administra. Entity Framework
proporciona las maneras siguientes de consultar un EDM y devolver objetos:

LINQ to Entities: proporciona compatibilidad con Language-Integrated Query (LINQ) para consultar los
tipos de entidad que se definen en un modelo conceptual.

Entity SQL: dialecto independiente del almacenamiento de SQL que funciona directamente con las
entidades del modelo conceptual y que admite caractersticas del EDM como la herencia y las relaciones.
Entity SQL se utiliza con las consultas de objeto y con las consultas que se ejecutan con el proveedor de
EntityClient.

Mtodos del generador de consultas: permite construir consultas de Entity SQL utilizando los mtodos de
consulta del estilo de LINQ.

El Entity Framework incluye el proveedor de datos de EntityClient. Este proveedor administra las conexiones,
traduce las consultas de entidad en consultas especficas del origen de datos y devuelve un lector de datos que
Servicios de objeto usa para materializar los datos de la entidad en los objetos. Cuando no se requiere la
materializacin de los objetos, el proveedor de EntityClient tambin se puede utilizar como un proveedor de
datos ADO.NET estndar habilitando las aplicaciones para ejecutar las consultas de Entity SQL y usar el lector
de datos de solo lectura devuelto.
El diagrama siguiente muestra la arquitectura de Entity Framework para el acceso a datos:

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 5/24

El Entity Framework genera una clase derivada de ObjectContext que representa el contenedor de entidades
definido en el modelo conceptual. Este contexto del objeto proporciona los medios para realizar el seguimiento
de los cambios y administrar las identidades, la simultaneidad y las relaciones. Esta clase tambin expone un
mtodo SaveChanges que escribe las inserciones, actualizaciones y eliminaciones en el origen de datos. Al
igual que las consultas, estas modificaciones son realizadas bien por los comandos que el sistema genera
automticamente o bien por los procedimientos almacenados que el programador especifica.
4. HERRAMIENTAS DE ENTITY DATA MODEL
Junto con el motor de tiempo de ejecucin de Entity Framework, .NET Framework 3.5 SP1 incluye el generador de
EDM (EdmGen.exe). Esta utilidad de smbolo del sistema se conecta a un origen de datos y genera un EDM
basado en una asignacin unvoca entre las entidades y las tablas.
Tambin usa un archivo de modelo conceptual (.csdl) para generar un archivo de nivel de objeto que contiene
clases que representan tipos de entidad y ObjectContext..
Visual Studio 2008 incluye una variada compatibilidad con las herramientas que permiten generar y mantener un
EDM en una aplicacin de Visual Studio. El Entity Data Model Designer permite crear escenarios de asignacin
avanzados, por ejemplo de la herencia de tabla por tipo y de tabla por jerarqua, y entidades de divisin que se

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 6/24

asignan a varias tablas.

PROCEDIMENTO:
CREAR LA APLICACIN DE EJEMPLO SCHOOL
En esta tarea, se crea el esquema de la base de datos School y se cargan datos en ella. Para ello, se usa SQL
Server Management Studio o SQL Server Management Studio Express para ejecutar un script de Transact-SQL.
La base de datos School resultante se usa como origen de datos relacional en el resto de las tareas.

Para crear la base de datos School y el esquema

1. En el men Archivo, elija Nuevo y haga clic en Consulta de motor de base de datos.
2. En el cuadro de dilogo Conectar al motor de base de datos, escriba el host local o el nombre de la
instancia de SQL Server local, y haga clic en Conectar.
3. Pegue el siguiente script de Transact-SQL en la ventana de consulta y, a continuacin, haga clic en Ejecutar.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
USE [master];
GO
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'School')
DROP DATABASE School;
GO
-- Create the School database.
CREATE DATABASE School;
GO
-- Specify a simple recovery model
-- to keep the log growth to a minimum.
ALTER DATABASE School
SET RECOVERY SIMPLE;
GO
USE School;
GO
-- Create the Department table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Department]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Department](

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
[DepartmentID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Budget] [money] NOT NULL,
[StartDate] [datetime] NOT NULL,
[Administrator] [int] NULL,
CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED
(
[DepartmentID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the Person table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Person]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Person](
[PersonID] [int] IDENTITY(1,1) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[HireDate] [datetime] NULL,
[EnrollmentDate] [datetime] NULL,
CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTERED
(
[PersonID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the OnsiteCourse table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[OnsiteCourse](
[CourseID] [int] NOT NULL,
[Location] [nvarchar](50) NOT NULL,
[Days] [nvarchar](50) NOT NULL,
[Time] [smalldatetime] NOT NULL,
CONSTRAINT [PK_OnsiteCourse] PRIMARY KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the OnlineCourse table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[OnlineCourse]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[OnlineCourse](
[CourseID] [int] NOT NULL,
[URL] [nvarchar](100) NOT NULL,

Pgina: 7/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
--Create the CourseGrade table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[CourseGrade]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[CourseGrade](
[EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
[CourseID] [int] NOT NULL,
[StudentID] [int] NOT NULL,
[Grade] [decimal](3, 2) NULL,
CONSTRAINT [PK_CourseGrade] PRIMARY KEY CLUSTERED
(
[EnrollmentID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the CourseInstructor table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[CourseInstructor]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[CourseInstructor](
[CourseID] [int] NOT NULL,
[PersonID] [int] NOT NULL,
CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED
(
[CourseID] ASC,
[PersonID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the Course table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Course]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Course](
[CourseID] [int] NOT NULL,
[Title] [nvarchar](100) NOT NULL,
[Credits] [int] NOT NULL,
[DepartmentID] [int] NOT NULL,
CONSTRAINT [PK_School.Course] PRIMARY KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

Pgina: 8/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
END
GO
-- Create the OfficeAssignment table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[OfficeAssignment]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[OfficeAssignment](
[InstructorID] [int] NOT NULL,
[Location] [nvarchar](50) NOT NULL,
[Timestamp] [timestamp] NOT NULL,
CONSTRAINT [PK_OfficeAssignment] PRIMARY KEY CLUSTERED
(
[InstructorID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Define the relationship between OnsiteCourse and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnsiteCourse_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]'))
ALTER TABLE [dbo].[OnsiteCourse] WITH CHECK ADD
CONSTRAINT [FK_OnsiteCourse_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[OnsiteCourse] CHECK
CONSTRAINT [FK_OnsiteCourse_Course]
GO
-- Define the relationship between OnlineCourse and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnlineCourse_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[OnlineCourse]'))
ALTER TABLE [dbo].[OnlineCourse] WITH CHECK ADD
CONSTRAINT [FK_OnlineCourse_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[OnlineCourse] CHECK
CONSTRAINT [FK_OnlineCourse_Course]
GO
-- Define the relationship between CourseGrade and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseGrade_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[CourseGrade]'))
ALTER TABLE [dbo].[CourseGrade] WITH CHECK ADD
CONSTRAINT [FK_CourseGrade_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[CourseGrade] CHECK
CONSTRAINT [FK_CourseGrade_Course]
GO
--Define the relationship between CourseGrade and Student.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys

Pgina: 9/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseGrade_Student]')
AND parent_object_id = OBJECT_ID(N'[dbo].[CourseGrade]'))
ALTER TABLE [dbo].[CourseGrade] WITH CHECK ADD
CONSTRAINT [FK_CourseGrade_Student] FOREIGN KEY([StudentID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[CourseGrade] CHECK
CONSTRAINT [FK_CourseGrade_Student]
GO
-- Define the relationship between CourseInstructor and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseInstructor_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[CourseInstructor]'))
ALTER TABLE [dbo].[CourseInstructor] WITH CHECK ADD
CONSTRAINT [FK_CourseInstructor_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[CourseInstructor] CHECK
CONSTRAINT [FK_CourseInstructor_Course]
GO
-- Define the relationship between CourseInstructor and Person.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseInstructor_Person]')
AND parent_object_id = OBJECT_ID(N'[dbo].[CourseInstructor]'))
ALTER TABLE [dbo].[CourseInstructor] WITH CHECK ADD
CONSTRAINT [FK_CourseInstructor_Person] FOREIGN KEY([PersonID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[CourseInstructor] CHECK
CONSTRAINT [FK_CourseInstructor_Person]
GO
-- Define the relationship between Course and Department.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_Course_Department]')
AND parent_object_id = OBJECT_ID(N'[dbo].[Course]'))
ALTER TABLE [dbo].[Course] WITH CHECK ADD
CONSTRAINT [FK_Course_Department] FOREIGN KEY([DepartmentID])
REFERENCES [dbo].[Department] ([DepartmentID])
GO
ALTER TABLE [dbo].[Course] CHECK CONSTRAINT [FK_Course_Department]
GO
--Define the relationship between OfficeAssignment and Person.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_OfficeAssignment_Person]')
AND parent_object_id = OBJECT_ID(N'[dbo].[OfficeAssignment]'))
ALTER TABLE [dbo].[OfficeAssignment] WITH CHECK ADD
CONSTRAINT [FK_OfficeAssignment_Person] FOREIGN KEY([InstructorID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[OfficeAssignment] CHECK
CONSTRAINT [FK_OfficeAssignment_Person]
GO
-- Create InsertOfficeAssignment stored procedure.

Pgina: 10/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[InsertOfficeAssignment]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[InsertOfficeAssignment]
@InstructorID int,
@Location nvarchar(50)
AS
INSERT INTO dbo.OfficeAssignment (InstructorID, Location)
VALUES (@InstructorID, @Location);
IF @@ROWCOUNT > 0
BEGIN
SELECT [Timestamp] FROM OfficeAssignment
WHERE InstructorID=@InstructorID;
END
'
END
GO
--Create the UpdateOfficeAssignment stored procedure.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[UpdateOfficeAssignment]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[UpdateOfficeAssignment]
@InstructorID int,
@Location nvarchar(50),
@OrigTimestamp timestamp
AS
UPDATE OfficeAssignment SET Location=@Location
WHERE InstructorID=@InstructorID AND [Timestamp]=@OrigTimestamp;
IF @@ROWCOUNT > 0
BEGIN
SELECT [Timestamp] FROM OfficeAssignment
WHERE InstructorID=@InstructorID;
END
'
END
GO
-- Create the DeleteOfficeAssignment stored procedure.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[DeleteOfficeAssignment]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[DeleteOfficeAssignment]
@InstructorID int
AS
DELETE FROM OfficeAssignment
WHERE InstructorID=@InstructorID;
'
END
GO
-- Create the DeletePerson stored procedure.

Pgina: 11/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[DeletePerson]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[DeletePerson]
@PersonID int
AS
DELETE FROM Person WHERE PersonID = @PersonID;
'
END
GO
-- Create the UpdatePerson stored procedure.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[UpdatePerson]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[UpdatePerson]
@PersonID int,
@LastName nvarchar(50),
@FirstName nvarchar(50),
@HireDate datetime,
@EnrollmentDate datetime
AS
UPDATE Person SET LastName=@LastName,
FirstName=@FirstName,
HireDate=@HireDate,
EnrollmentDate=@EnrollmentDate
WHERE PersonID=@PersonID;
'
END
GO
-- Create the InsertPerson stored procedure.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[InsertPerson]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[InsertPerson]
@LastName nvarchar(50),
@FirstName nvarchar(50),
@HireDate datetime,
@EnrollmentDate datetime
AS
INSERT INTO dbo.Person (LastName,
FirstName,
HireDate,
EnrollmentDate)
VALUES (@LastName,
@FirstName,
@HireDate,
@EnrollmentDate);
SELECT SCOPE_IDENTITY() as NewPersonID;
'
END

Pgina: 12/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 13/24

GO
-- Create GetStudentGrades stored procedure.
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 FROM dbo.CourseGrade
WHERE StudentID = @StudentID
'
END
GO
-- Insert data into the Person table.
USE School
GO
SET IDENTITY_INSERT dbo.Person ON
GO
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (1, 'Abercrombie', 'Kim', '1995-03-11', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (2, 'Barzdukas', 'Gytis', null, '2005-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (3, 'Justice', 'Peggy', null, '2001-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (4, 'Fakhouri', 'Fadi', '2002-08-06', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (5, 'Harui', 'Roger', '1998-07-01', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (6, 'Li', 'Yan', null, '2002-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (7, 'Norman', 'Laura', null, '2003-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (8, 'Olivotto', 'Nino', null, '2005-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (9, 'Tang', 'Wayne', null, '2005-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (10, 'Alonso', 'Meredith', null, '2002-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (11, 'Lopez', 'Sophia', null, '2004-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (12, 'Browning', 'Meredith', null, '2000-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (13, 'Anand', 'Arturo', null, '2003-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (14, 'Walker', 'Alexandra', null, '2000-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (15, 'Powell', 'Carson', null, '2004-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (16, 'Jai', 'Damien', null, '2001-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (17, 'Carlson', 'Robyn', null, '2005-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (18, 'Zheng', 'Roger', '2004-02-12', null);

EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (19, 'Bryant', 'Carson', null, '2001-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (20, 'Suarez', 'Robyn', null, '2004-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (21, 'Holt', 'Roger', null, '2004-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (22, 'Alexander', 'Carson', null, '2005-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (23, 'Morgan', 'Isaiah', null, '2001-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (24, 'Martin', 'Randall', null, '2005-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (25, 'Kapoor', 'Candace', '2001-01-15', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (26, 'Rogers', 'Cody', null, '2002-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (27, 'Serrano', 'Stacy', '1999-06-01', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (28, 'White', 'Anthony', null, '2001-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (29, 'Griffin', 'Rachel', null, '2004-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (30, 'Shan', 'Alicia', null, '2003-09-01');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (31, 'Stewart', 'Jasmine', '1997-10-12', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (32, 'Xu', 'Kristen', '2001-7-23', null);
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (33, 'Gao', 'Erica', null, '2003-01-30');
INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate,
VALUES (34, 'Van Houten', 'Roger', '2000-12-07', null);
GO
SET IDENTITY_INSERT dbo.Person OFF
GO
-- Insert data into the Department table.
INSERT INTO dbo.Department (DepartmentID, [Name], Budget,
VALUES (1, 'Engineering', 350000.00, '2007-09-01', 2);
INSERT INTO dbo.Department (DepartmentID, [Name], Budget,
VALUES (2, 'English', 120000.00, '2007-09-01', 6);
INSERT INTO dbo.Department (DepartmentID, [Name], Budget,
VALUES (4, 'Economics', 200000.00, '2007-09-01', 4);
INSERT INTO dbo.Department (DepartmentID, [Name], Budget,
VALUES (7, 'Mathematics', 250000.00, '2007-09-01', 3);
GO
-- Insert data into the Course table.
INSERT INTO dbo.Course (CourseID, Title,
VALUES (1050, 'Chemistry', 4, 1);
INSERT INTO dbo.Course (CourseID, Title,
VALUES (1061, 'Physics', 4, 1);
INSERT INTO dbo.Course (CourseID, Title,
VALUES (1045, 'Calculus', 4, 7);
INSERT INTO dbo.Course (CourseID, Title,
VALUES (2030, 'Poetry', 2, 2);
INSERT INTO dbo.Course (CourseID, Title,

Pgina: 14/24

EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)
EnrollmentDate)

StartDate, Administrator)
StartDate, Administrator)
StartDate, Administrator)
StartDate, Administrator)

Credits, DepartmentID)
Credits, DepartmentID)
Credits, DepartmentID)
Credits, DepartmentID)
Credits, DepartmentID)

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
GO

(2021, 'Composition', 3, 2);


INTO dbo.Course (CourseID, Title,
(2042, 'Literature', 4, 2);
INTO dbo.Course (CourseID, Title,
(4022, 'Microeconomics', 3, 4);
INTO dbo.Course (CourseID, Title,
(4041, 'Macroeconomics', 3, 4);
INTO dbo.Course (CourseID, Title,
(4061, 'Quantitative', 2, 4);
INTO dbo.Course (CourseID, Title,
(3141, 'Trigonometry', 4, 7);

Credits, DepartmentID)
Credits, DepartmentID)
Credits, DepartmentID)
Credits, DepartmentID)
Credits, DepartmentID)

-- Insert data into the OnlineCourse table.


INSERT INTO dbo.OnlineCourse (CourseID, URL)
VALUES (2030, 'http://www.fineartschool.net/Poetry');
INSERT INTO dbo.OnlineCourse (CourseID, URL)
VALUES (2021, 'http://www.fineartschool.net/Composition');
INSERT INTO dbo.OnlineCourse (CourseID, URL)
VALUES (4041, 'http://www.fineartschool.net/Macroeconomics');
INSERT INTO dbo.OnlineCourse (CourseID, URL)
VALUES (3141, 'http://www.fineartschool.net/Trigonometry');
--Insert data into OnsiteCourse table.
INSERT INTO dbo.OnsiteCourse (CourseID, Location,
VALUES (1050, '123 Smith', 'MTWH', '11:30');
INSERT INTO dbo.OnsiteCourse (CourseID, Location,
VALUES (1061, '234 Smith', 'TWHF', '13:15');
INSERT INTO dbo.OnsiteCourse (CourseID, Location,
VALUES (1045, '121 Smith','MWHF', '15:30');
INSERT INTO dbo.OnsiteCourse (CourseID, Location,
VALUES (4061, '22 Williams', 'TH', '11:15');
INSERT INTO dbo.OnsiteCourse (CourseID, Location,
VALUES (2042, '225 Adams', 'MTWH', '11:00');
INSERT INTO dbo.OnsiteCourse (CourseID, Location,
VALUES (4022, '23 Williams', 'MWF', '9:00');

Days, [Time])
Days, [Time])
Days, [Time])
Days, [Time])
Days, [Time])
Days, [Time])

-- Insert data into the CourseInstructor table.


INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (1050, 1);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (1061, 31);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (1045, 5);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (2030, 4);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (2021, 27);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (2042, 25);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (4022, 18);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (4041, 32);
INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
VALUES (4061, 34);
GO

Pgina: 15/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
--Insert data into the OfficeAssignment table.
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (1, '17 Smith');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (4, '29 Adams');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (5, '37 Williams');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (18, '143 Smith');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (25, '57 Adams');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (27, '271 Williams');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (31, '131 Smith');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (32, '203 Williams');
INSERT INTO dbo.OfficeAssignment(InstructorID,
VALUES (34, '213 Smith');

Location)
Location)
Location)
Location)
Location)
Location)
Location)
Location)
Location)

-- Insert data into the CourseGrade table.


INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2021, 2, 4);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2030, 2, 3.5);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2021, 3, 3);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2030, 3, 4);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2021, 6, 2.5);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2042, 6, 3.5);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2021, 7, 3.5);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2042, 7, 4);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2021, 8, 3);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (2042, 8, 3);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4041, 9, 3.5);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4041, 10, null);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4041, 11, 2.5);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4041, 12, null);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4061, 12, null);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4022, 14, 3);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4022, 13, 4);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,
VALUES (4061, 13, 4);
INSERT INTO dbo.CourseGrade (CourseID, StudentID,

Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)
Grade)

Pgina: 16/24

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
GO

(4041, 14, 3);


INTO dbo.CourseGrade
(4022, 15, 2.5);
INTO dbo.CourseGrade
(4022, 16, 2);
INTO dbo.CourseGrade
(4022, 17, null);
INTO dbo.CourseGrade
(4022, 19, 3.5);
INTO dbo.CourseGrade
(4061, 20, 4);
INTO dbo.CourseGrade
(4061, 21, 2);
INTO dbo.CourseGrade
(4022, 22, 3);
INTO dbo.CourseGrade
(4041, 22, 3.5);
INTO dbo.CourseGrade
(4061, 22, 2.5);
INTO dbo.CourseGrade
(4022, 23, 3);
INTO dbo.CourseGrade
(1045, 23, 1.5);
INTO dbo.CourseGrade
(1061, 24, 4);
INTO dbo.CourseGrade
(1061, 25, 3);
INTO dbo.CourseGrade
(1050, 26, 3.5);
INTO dbo.CourseGrade
(1061, 26, 3);
INTO dbo.CourseGrade
(1061, 27, 3);
INTO dbo.CourseGrade
(1045, 28, 2.5);
INTO dbo.CourseGrade
(1050, 28, 3.5);
INTO dbo.CourseGrade
(1061, 29, 4);
INTO dbo.CourseGrade
(1050, 30, 3.5);
INTO dbo.CourseGrade
(1061, 30, 4);

Pgina: 17/24

(CourseID, StudentID, Grade)


(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)
(CourseID, StudentID, Grade)

Para revisar las tablas de la base de datos school

1. En el men Archivo, haga clic en Conectar Explorador de objetos.


2. En el cuadro de dilogo Conectar al motor de base de datos, escriba el host local o el nombre de la
instancia de SQL Server local, y haga clic en Conectar.
3. En la ventana Explorador de objetos, expanda el nodo correspondiente a la instancia recientemente
conectada; a continuacin, expanda sucesivamente Bases de datos, School y Tablas; y, por ltimo,

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 18/24

revise la lista de objetos de tabla en la base de datos.


A continuacin se muestra un diagrama del esquema de la base de datos School.

CREAR LA APLICACIN DEL ADMINISTRADOR DEL CURSO


En esta tarea, se va a crear la aplicacin para Windows Administrador de cursos mediante Visual Studio 2008.

Para crear la aplicacin Administrador de cursos mediante Visual Studio

1.
2.
3.
4.

En el men Archivo, haga clic en Nuevo proyecto.


Elija Visual Basic o Visual C# en el panel Tipos de proyecto.
En el panel Plantillas, seleccione Aplicacin de Windows Forms.
Escriba CourseManager como nombre del proyecto y haga clic en Aceptar.

Para crear el formulario Visor del curso

1. En el proyecto CourseManager, seleccione el formulario predeterminado (Form1).


2. En el panel Propiedades del archivo, cambie el Nombre de archivo a CourseViewer.vb o
CourseViewer.cs.

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 19/24

3. En el Explorador de soluciones, haga doble clic en CourseViewer.vb o en CourseViewer.cs para abrir


el formulario.
4. En el panel Propiedades, cambie la propiedad Name a CourseViewer y la propiedad Text a Visor del
curso.
5. En el Cuadro de herramientas, expanda Controles comunes, arrastre el control ComboBox al
formulario y cambie el nombre del control a departmentList.
6. En el Cuadro de herramientas, arrastre el control Button al formulario, cambie el nombre del control a
closeForm y cambie el valor de Text a Cerrar.
7. En el Cuadro de herramientas, expanda Datos, arrastre el control DataGridView al formulario y cambie
el nombre del control a courseGridView.
8. Haga doble clic en el control de botn closeForm.
De esta forma se abre la pgina de cdigos del formulario y se crea el mtodo del controlador de eventos
closeForm_Click.
9. En el mtodo del controlador de eventos closeForm_Click, escriba el cdigo siguiente que cierra el
formulario:
// Close the form.
this.Close();

GENERAR EL ENTITY DATA MODEL SCHOOL


En esta tarea, aprender a usar el asistente de Entity Data Model para generar un Entity Data Model (EDM).
Este EDM define un conjunto de archivos de asignaciones de entidad a tabla para el modelo School.

Para agregar la plantilla de elementos de Entity Data Model de ADO.NET

1. Seleccione el proyecto CourseManager en el Explorador de soluciones, haga clic con el botn secundario,
elija Agregar y haga clic en Nuevo elemento.
2. Seleccione Entity Data Model de ADO.NET en el panel Plantillas.
3. Escriba School.edmx como nombre del modelo y haga clic en Agregar.

Para generar EDM

1.
2.
3.
4.

Seleccione Generar desde base de datos en el cuadro de dilogo Elegir contenido del modelo. Despus,
haga clic en Siguiente.
Haga clic en el botn Nueva conexin.
En el cuadro de dilogo Elegir origen de datos, seleccione su origen de datos y, a continuacin, haga clic en
Continuar.
En el cuadro de dilogo Propiedades de conexin, escriba su nombre de servidor, seleccione el mtodo de
autenticacin, escriba School como nombre de la base de datos y, a continuacin, haga clic en Aceptar.
El cuadro de dilogo Elegir la conexin de datos se actualiza con la configuracin de la conexin de base de

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 20/24

datos.
5.

Asegrese de que la opcin Guardar configuracin de conexin de entidad en App.Config como: est
seleccionada y el valor est establecido en SchoolEntities. Despus, haga clic en Siguiente.
Aparece el cuadro de dilogo Elija los objetos de base de datos.

6. Asegrese de que todas las tablas y procedimientos almacenados estn seleccionados y de que el valor
de Espacio de nombres del modelo es SchoolModel, y haga clic en Finalizar para completar el
asistente.
7. El asistente realiza las tareas siguientes:

Agrega referencias a los ensamblados System.Data.Entity, System.Security y


System.Runtime.Serialization.

Genera el archivo School.edmx que define el EDM.

Crea un archivo de cdigo fuente que contiene las clases que se generaron segn el EDM. Puede
ver el archivo de cdigo fuente expandiendo el archivo .edmx en el Explorador de soluciones.

Crea un archivo App.Config.

Para ver EDM en el diseador de Entity Data Model de ADO.NET

1. En el Explorador de soluciones, haga doble clic en el archivo School.edmx.


De este modo se muestra el modelo School en la ventana del diseador de Entity Data Model de
ADO.NET, segn se muestra en el diagrama siguiente.

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 21/24

2. En el men Ver, seleccione Otras ventanas y, a continuacin, haga clic en Mostrar el Explorador de
modelos de entidad.
De esta forma se muestra la ventana del Explorador de modelos de entidad.
3. Expanda los nodos SchoolModel y SchoolModel.Store para ver las definiciones de almacn y
conceptual, respectivamente.
4. En el men Ver, seleccione Otras ventanas, haga clic en Mostrar detalles de asignacin de entidades
y, a continuacin, haga clic en una entidad o asociacin en el diseador de entidades.
De este modo se muestra la ventana Detalles de asignacin de entidades con informacin acerca de la
asignacin relacional de objetos correspondiente al objeto seleccionado.

CONSULTAR ENTIDADES Y ASOCIACIONES


En esta tarea se crearn consultas con establecimiento inflexible de tipos en los objetos CLR que representan
a las entidades y asociaciones del modelo School, y se enlazarn controles de presentacin a las colecciones
de objetos que devuelvan estas consultas.

Para consultar los departamentos de la base de datos School

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

1.

Pgina: 22/24

Al principio del archivo de cdigo del formulario CourseViewer, agregue las instrucciones siguientes using
(C#) o Imports (Visual Basic) para hacer referencia al modelo creado a partir de la base de datos School y
del espacio de nombres de entidad.
using System.Data.Objects;
using System.Data.Objects.DataClasses;

2.

Al principio de la definicin de clase parcial del formulario CourseViewer, agregue el cdigo siguiente que crea
una instancia de ObjectContext.
// Create an ObjectContext instance based on SchoolEntity.
private SchoolEntities schoolContext;

3. En el diseador de formularios de CourseViewer, haga doble clic en el formulario CourseViewer.


De esta forma se abre la pgina de cdigo del formulario y se crea el mtodo del controlador de eventos
courseViewer _Load.
4. En el mtodo del controlador de eventos courseViewer _Load, copie y pegue el cdigo siguiente que
define la DataGridView, ejecuta una consulta que devuelve una coleccin de departamentos (ordenados
por Name) y enlaza la coleccin de objetos Department al control departmentList.
// Initialize the ObjectContext.
schoolContext = new SchoolEntities();
// Define a query that returns all Department objects and related
// Course objects, ordered by name.
ObjectQuery<Department> departmentQuery =
schoolContext.Department.Include("Course").OrderBy("it.Name");
try
{
// Bind the ComboBox control to the query, which is
// executed during data binding.
this.departmentList.DataSource = departmentQuery;
this.departmentList.DisplayMember = "Name";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

Para mostrar cursos para el departamento seleccionado

1. En el diseador de formularios de CourseViewer, haga doble clic en el control departmentList.


De este modo, se crea mtodo del controlador de eventos departmentList_SelectedIndexChanged.

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 23/24

2. Pegue el cdigo siguiente que carga los cursos que estn relacionados con el departamento seleccionado.
try
{
// Get the object for the selected department.
Department department =
(Department)this.departmentList.SelectedItem;
// Bind the grid view to the collection of Course objects
// that are related to the selected Department object.
courseGridView.DataSource = department.Course;
courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
INSERTAR Y ACTUALIZAR DATOS
En esta tarea, se guardarn en la base de datos los cambios efectuados en los objetos Course enlazados al
control DataGridView. Tambin se ejecutar la aplicacin del administrador del curso completada.

Paga guardar los cambios realizados en los objetos

1. En el Cuadro de herramientas, expanda Controles comunes, arrastre el control Button al diseador de


formularios de CourseViewer, cambie el nombre del control a saveChanges y cambie el valor Text a
Update.
2. En el diseador de formularios de CourseViewer, haga doble clic en el control saveChanges.
De este modo, se crea mtodo del controlador de eventos saveChanges_Click.
3. Pegue el cdigo siguiente que guarda los cambios de los objetos en la base de datos.
try
{
int numChanges;
// Save object changes to the database, display a message,
// and refresh the form.
numChanges = schoolContext.SaveChanges();
MessageBox.Show(numChanges.ToString() +
" change(s) saved to the database.");
this.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

Para cerrar las conexiones eliminando el contexto del objeto de larga duracin

Facultad de Ingenieras y Arquitectura


Escuela Profesional de Ingeniera de Sistemas e Informtica
LABORATORIO DE DESARROLLO RAPIDO DE APLICACIONES PARA
INTERNET

Pgina: 24/24

En el mtodo del controlador de eventos closeForm_Click, escriba el siguiente cdigo. Este cdigo
elimina el contexto del objeto antes de que se cierre el formulario.
// Dispose the object context.
schoolContext.Dispose();

Para generar y ejecutar la aplicacin de programacin de clases

1. En el men Depurar, seleccione Iniciar depuracin o Iniciar sin depurar.


De esta forma se genera y se inicia la aplicacin.
2. Cuando se cargue el formulario, seleccione un departamento en el control ComboBox.
Se muestran los cursos pertenecientes a ese departamento.
3. En la DataGridView, actualice la informacin del curso o agregue un curso nuevo, y haga clic en Update.
De esta forma se guardan los cambios en la base de datos y se muestra un cuadro de mensaje que
indica el nmero de cambios guardados.

Firma del Docente

You might also like