Está en la página 1de 53

2011

Entity Framework.Net

Universidad de El Salvador. Facultad Multidisciplinaria de Occidente. Departamento de ingeniera y Arquitectura. Presentado por: Juan Jos Abarca Mena. Kelvin Geovanni Chicas. Walter Arvalo Moran. Luis Ernesto Martnez. Wallace Steed Velasquez. 23/05/2011

Universidad de El Salvador.

Introduccin.
ADO.NET Entity Framework admite aplicaciones y servicios centrados en datos, y proporciona una plataforma para la programacin con datos que eleva el nivel de abstraccin del nivel lgico relacional al nivel conceptual. Al permitir a los programadores trabajar con datos en un nivel de abstraccin superior, Entity Framework admite cdigo que es independiente de cualquier motor de almacenamiento de datos o esquema relacional determinados. Para obtener ms informacin, vea Informacin general de Entity Framework. Entity Framework admite Entity Data Model (EDM) para definir datos en el nivel conceptual. Cuando se usa ADO.NET Entity Data Model Designer, la informacin sobre la asignacin, el modelo conceptual y el de almacenamiento se almacena en un archivo .edmx. Entity Framework tambin permite a los desarrolladores programar directamente con los tipos de datos definidos en el nivel conceptual como objetos de Common Language Runtime (CLR). Entity Framework proporciona herramientas para generar un archivo .edmx y los objetos de CLR relacionados basndose en una base de datos existente. Esto reduce en gran medida el cdigo de acceso a datos que se sola necesitar para crear aplicaciones y servicios de datos basados en objetos, y agiliza la creacin de servicios y aplicaciones de datos orientadas a objetos a partir de una base de datos existente. Las herramientas tambin permiten compilar en primer lugar un modelo conceptual y, a continuacin, generar automticamente los objetos de CLR relacionados y una base de datos auxiliar.

Pgina 2

Universidad de El Salvador.

Qu es Entity Framework. Net?


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. Con Entity Framework , los desarrolladores de software pueden trabajar en un nivel ms alto de abstraccin cuando tratan con datos, y puede crear y mantener aplicaciones orientadas a datos con menos cdigo que en las aplicaciones tradicionales. Dado que Entity Framework es un componente de .NET Framework, las aplicaciones de Entity Framework se pueden ejecutar en cualquier equipo en el que est instalado .NET Framework a partir de la versin 3.5 SP1.

Pgina 3

Universidad de El Salvador.
Por otra parte, como todo marco de trabajo, Entity Framework incluye dos componentes fundamentales: Recursos para el entorno de desarrollo y en particular un asistente para el diseo visual de modelos de entidades dentro de Visual Studio asi como la generacion de codigo a partir de los mismos. Biblioteca. Los tipos que componen ADO.NET EF se implementan fisicamente en el ensamblado System.Data.Entity. La organizacin lgica de eso tipos es tal y como se muestra en la tabla a continuacin. Todo esto refuerza la idea de la pertenencia de EF a la familia de ADO.NET.

Tabla 1. Espacios de nombres relacionados con Entity Framework.

Pgina 4

Universidad de El Salvador.

Arquitectura y componentes
ADO.NET Entity framework 4.0 se apoya en seis elementos fundamentales construidos encima de todas las bases de ADO.NET, tal y como podemos ver en la siguiente figura:

Figura 1. Componentes principales de ADO.NET Entity Framework 4.0 A continuacion, presentamos los conceptos fundamentales relacionados con cada uno de estos elementos (de abajo hacia arriba), profundizando en cada uno de ellos de forma practica.

Proveedores especficos.
Una de las caractersticas ms atractivas de ADO.NET EF es su agnosticismo con relacion a la base de datos contra la que se trabaja. En verdad, Entity Framework es una implementacion de un Data Mapper entre las entidades definidas en un modelo conceptual y el esquema fisico de la base de datos subyacente. Por defecto, en la actual version de esta tecnologia tendremos un proveedor especifico para Sql Server, en todas sus versiones 2000, 2005 y por supuesto 2008 y 2008 R2. La posibilidad de crear aplicaciones multi-base de datos es cada vez ms un requisito indispensable para fabricantes de software, tambien conocidos por sus siglas ISV (Independent Software Vendors), y departamentos de informatica de grandes corporaciones donde la seleccion del motor de la base de datos podra variar entre cambios organizativos y de directores. Logicamente, el hecho de que las aplicaciones puedan soportar multiples motores relacionales es un valor aadido para aquellas empresas que quieran colocar su producto en el mercado. La

Pgina 5

Universidad de El Salvador.
posibilidad de implantar su producto en una empresa que usen como norma SQL Server pero tambien poder implementar el mismo en otra empresa con Oracle es algo que les puede proporcionar pingues beneficios. La lista aproximada de proveedores disponibles puede verse en la siguiente tabla:

Tabla 2. Lista de algunos proveedores de ADO.NET Entity Framework 4.0.

Entity Data Model


El primero de los elementos fundamentales en la arquitectura de ADO.NET Entity Framework es el Modelo de Entidades, normalmente conocido como EDM. Este diseador nos permite definir los conjuntos de entidades y relaciones entre las mismas de nuestros modelos conceptuales, as como especificar de qu manera estos tipos se mapearan a la estructura de la fuente de almacenamiento relacional subyacente. Para apoyar a EDM, disponemos de una serie de herramientas integradas dentro del entorno que nos ayudaran a crear nuestros modelos conceptuales. A continuacin pasaremos a detallar el funcionamiento y objetivo de cada una de ellas:

Pgina 6

Universidad de El Salvador.
Diseador de modelos EDM (Entity Data Model Designer) El diseador de modelos es una herramienta visual integrada dentro de Visual Studio 2010 que permite crear y editar modelos conceptuales. Este diseador est formado por los siguientes componentes: Una superficie de diseo para crear y editar los modelos de una forma r pida similar al trabajo con los diagramas de clases de Visual Studio. Una ventana de detalles de mapeo, que nos permitir ver y editar los mapeos entre los elementos del modelo conceptual y del esquema de la base de datos con la que estemos trabajando. Una ventana de navegacin por el modelo, en la cual podremos ver arboles informacin sobre el modelo conceptual y el modelo fsico. de

Nuevos elementos dentro de la ventana de herramientas, que nos permitirn, por ejemplo, crear las entidades, las asociaciones o relaciones de herencia.

El diseador de modelos opera sobre ficheros de tipo edmx. Estos ficheros se forman mediante la combinacin de tres secciones de metadatos en formato XML (que en ocasiones pueden presentarse tambin como ficheros independientes), llamadas respectivamente SSDL, CSDL y MSL. SSDL (Storage Schema Definition Language) describe la estructura fisica de la base de datos subyacente, incluyendo la definicin de las tablas, columnas, vistas, procedimientos almacenados y relaciones entre los distintos objetos de la misma. CSDK (Conceptual Schema Definition Language) describe las entidades que deseamos tener en nuestro modelo conceptual, as como las propiedades de navegacin o asociacin es entre las distintas entidades. Para terminar, el archivo edmx contiene la seccin MSL (Mapping Schema Language), tambin conocida como seccin C-S, mediante la cual se especifican como se asocian o relacionan las entidades del modelo conceptual (definido en la seccin CSDK) con las tablas, vistas, columnas, etc. Del modelo fsico definido en la seccin SSDL.

Pgina 7

Universidad de El Salvador.

Figura 2.- Secciones de metadatos de un modelo EDMX. Una vez que se agrega dentro de un proyecto de Visual Studio 2010 el elemento ADO.NET Entity Data Model, el asistente de modelos (del que hablaremos a continuacin) crea un nuevo archivo edmx y lo agrega al proyecto en el que estemos trabajando. La siguiente figura, nos muestra un ejemplo de un diseador EDM y las distintas ventanas de herramientas con las que podemos trabajar:

Figura 3. Diseador de EDM integrado en Visual Studio 2010.

Pgina 8

Universidad de El Salvador.
Asistente de modelos de entidades (Entity Data Model Wizard) Tal y como hemos mencionado anteriormente, el asistente de modelos es el encargado de generar el archivo edmx con el que trabaja el diseador. Para ello, este asistente permite crear el modelo a partir de una base de datos ya existente (la practica ms habitual a aunque no la nica). Con el fin de mostrar el asistente mencionado realizaremos un sencillo ejemplo, en realidad, el propsito del mismo es mas ensearle y que conozca las herramientas que hablar de modelos de entidades o las distintas posibilidades que EDM nos ofrece. Para el ejemplo, partiremos, de una base de datos con el esquema relacional que se puede ver en la figura siguiente:

Figura 4. Diagrama relacional del ejemplo

En un proyecto cualquiera de Visual Studio (un ejemplo de aplicacin de consola le podr valer para descubrir las herramientas con las que trabajaremos), agregamos un nuevo elemento de tipo ADO.NET Entity Data Model, Figura 5. Una vez hecho esto, el asistente nos permitir seleccionar la base de datos a partir de la cual crearemos nuestro modelo conceptual, figuras 6 y 7.

Pgina 9

Universidad de El Salvador.

Figura 5. Agregando un modelo de EDM

Figura 6. Asistente de creacin del modelo conceptual

Pgina 10

Universidad de El Salvador.

Figura 7. Asistente de creacin del modelo conceptual (2) Para terminar, seleccionaremos los elementos de la base de datos que queramos que formen parte de nuestro modelo conceptual. En nuestro caso, simplemente ponemos las tablas de Customer y Order, como vemos en la Figura 8:

Pgina 11

Universidad de El Salvador.
Una vez que hemos terminado de crear el modelo conceptual, ya podremos ver el archivo edmx dentro del proyecto, y el diseador de entidades se abrir cada vez que este archivo sea seleccionado. Si desea ver las distintas secciones de metadatos del archivo (recuerde: las secciones SSDL,CSDL y MSL), puede seleccionar el archivo del modelo EDM, seleccionar la opcin Abrir con su men contextual y elegir el editor de XML. Ver como ahora en vez del diseador se muestra un archivo XML con las distintas secciones de metadatos (figuras 9 y 10).

Figura 9. Seleccin de un editor para un archivo EDMX.

Figura 10. Vista XML de un archivo EDMX.

Pgina 12

Universidad de El Salvador.
Asistente de actualizacin de modelos. Esta herramienta se utiliza para actualizar el modelo EDM despus de que se hayan realizado cambios en la base de datos con la que estemos trabajando. Para usar esta herramienta, basta con situarse en el Navegador del modelo y seleccionar de su men contextual la opcin actualizar modelo desde la base de datos. El asistente de actualizacin de modelos pone a nuestra disposicin tres pestaas de trabajo:
Opcin Agregar Descripcin Permite incorporar al modelo nuevos elementos del esquema de la base de datos. Muestra los elementos actuales en el modelo y permite seleccionar aquellos cuya definicin queramos refrescar o actualizar. Muestra los elementos actuales en el modelo y permite seleccionar cuales no deseamos que pertenezcan a l.

Refrescar

Eliminar

Tabla 3. Tabla de actualizacin de modelos. A continuacin se muestra un sencillo ejemplo del uso del asistente de actualizacin de un modelo EDM. Lo nico que se har es agregar una nueva columna a la tabla Customer con el fin de especificar su nmero de pasaporte, PassportNumber. Una vez agregada la columna en el modelo relacional con el que estamos trabajando, seleccionaremos la ventana de navegacin del modelo y haremos clic en la opcin de actualizacin del modelo conceptual que tenemos en su men contextual.

Figura 11. Actualizacin del modelo.

Pgina 13

Universidad de El Salvador.
El asistente de actualizacin nos mostrara las tres opciones de la tabla anterior; en nuestro caso, seleccionaremos la opcin Refrescar el model (figura 12).

Figura 12. Refrescando un modelo de EDM. Una vez que el asistente haya terminado su trabajo, en este caso agregar una nueva propiedad a la entidad Customer, podremos ver como el diseador nos actualiza la informacin (figura 13).

Figura 13. Entidad despus de actualizar.

Pgina 14

Universidad de El Salvador.
Una vez que se produce la actualizacin de un modelo, se sobrescribe la seccin SSDL del fichero edmx correspondiente, por lo que si previamente hubiramos realizado cualquier modificacin sobre l, tales cambios se perdern y no se vern reflejados en el nuevo modelo. Sobre las secciones CSDL y MSL el asistente de actualizaciones solamente permite agregar elementos. Por ello cuando se eliminen tablas y/o asociaciones de la base de datos subyacente, estas seguirn presentes en el modelo EDM y deber ser usted manualmente quien los elimine. En la siguiente tabla se puede ver una lista de los cambios que se producen en los modelos EDM en funcin de las secciones realizadas en la base de datos subyacente.

Pgina 15

Universidad de El Salvador.

Tabla 4. Cambios en el modelo en funcin de las acciones.

EDMGen o Generador de EDM Por ltimo, EDMGen.exe es una herramienta de lnea de comandos usada para trabajar con modelos EDM. Los principales usos que se le pueden dar a EdmGen son los siguientes: Conectar con una fuente de datos usando un proveedor especfico de ADO.NET Entity Framework y generar las secciones SSDL, CSDL y MSL de EDM. Validar un modelo existente. Producir cdigo fuente a partir de la seccin CSDL.

Por defecto, EdmGen se sita en el directorio de la instalacin de .NET Framework 4.0, por lo que es accesible directamente desde la ventana de comandos de Visual Studio 2010. Aunque podr pensarse que en la mayora de los casos esta herramienta no va ser utilizada puesto que la tenemos perfectamente integrada dentro del entorno de desarrollo (Visual Studio 2010), es necesario conocer su existencia y posibles usos, pues podr ser conveniente utilizarla en algn proceso avanzado de generacin automtica de cdigo basado en modelos de entidades. En la siguiente tabla se muestra una lista de los diferentes modos de trabajo que ofrece EdmGen.

Tabla 5. Modos de trabajo de EdmGen.

Pgina 16

Universidad de El Salvador.

Entity Client
Entity Client (o EntityClient, unido, nombre con una connotacin ms cercana al cdigo) es sin duda alguna, junto a EDM, uno de los elementos centrales dentro de ADO.NET Entity Framework. Como seguramente sabremos, desde la versin 2.0 de .NET disponemos de jerarquas de clases que engloban bajo un mismo paraguas de herencias clases necesarias para trabajar con los proveedores especficos para cada motor de base de datos, como SqlClient u OracleClient. Entity Client representa un nuevo conjunto de clases que se integran armnicamente dentro de esas jerarquas .

Figura 14. Jerarqua de clases DbConnection. Entity Client es un nuevo proveedor de ADO.NET cuya principal diferencia con el resto de proveedores radica en que, a diferencia de los proveedores tradicionales que trabajan con los modelos fsicos de sus bases de datos, con Entity Client consultaremos los modelos de EDM, por lo que aprovecharemos en todo momento el agnosticismo de la base de datos subyacente. Entity Client implementa tambin a su nivel una arquitectura abierta, y es capaz de trabajar con diferentes proveedores de Entity Frame especficos, que son quienes se encargan de traducir las consultas sobre el modelo en consultas en el dialecto especifico de la base de datos subyacente, as como de la ejecucin de dichas consultas y la recuperacin de los resultados (para lo que probablemente se apoyen en otros proveedores de ADO.NET). El lenguaje que se utiliza para consultar los modelos de EDM se llama Entity SQL (abreviadamente, eSQL), y es una variante de los dialectos SQL tradicionales que mejora algunas aspectos de las consultas, como las navegaciones entre tablas.

Pgina 17

Universidad de El Salvador.

Object Services.
Acabamos de ver como con Entity Client y eSQL realmente podemos cubrir la mayora de las necesidades de una capa de acceso a datos. Sin embargo, este modelo es el mismo del que dispongamos hasta este momento: por supuesto, con las ventajas de la consulta de modelos conceptuales y el trabajo con mltiples bases de datos. Pero seguiremos sufriendo el trabajo de la recuperacin de los resultados obtenidos de la capa de datos para transformarlos en objetos de las distintas clases que tengamos en el conjunto de clases que confirman nuestro dominio del problema (proceso que se conoce como materializacin). Para salvar este desajuste, Entity Frame ofrece Object Services, un conjunto de clases que, entre otras facilidades, nos permiten obtener directamente objetos materializados a partir de las consultas eSQL que ejecutemos. Al mismo tiempo que disponemos de una materializacin automtica de los resultados, ganaremos tambin todas las ayudas que el compilador y el entorno integrado pueden ofrecernos, al estar trabajando en todo momento de una forma fuertemente tipada. En contraposicin al ejemplo del punto anterior, en el que se consultaban datos de un modelo conceptual usando Entity Client, a continuacin podremos ver cmo obtener esos mismos datos usando Object Services y materializando de forma automtica los resultados.

LINQ To Entities, L2E


Llegados a este punto, ya hemos visto varias de las mltiples ventajas que nos ofrece Entity Frame, incluyendo la posibilidad de realizar consultas sobre modelos conceptuales y la materializacin automtica de objetos a partir de los resultad os de esas consultas. Sin embargo, si preguntsemos a programadores de aplicaciones centradas en datos cual es la mayor fuente de errores que sufren durante sus horas de desarrollo, es casi seguro que uno de los elementos que mencionaran sern los errores en la escritura de las consultas que crean. Puesto que estas consultas para el compilador no son ms que meras secuencias de caracteres, este no podr validarlas ni ayudarnos en la codificacin de las mismas, de forma que, aun cuando una consulta no est bien formada o sea incorrecta, podremos compilar y ejecutar, quedando la deteccin de posibles errores para tiempo de ejecucin. La llegada de LINQ abra una va increble para salvar este inconveniente, sentando las bases para la utilizacin directa de consultas integradas e nuestro lenguaje de programacin. Y por supuesto, Microsoft no podr sacar a la luz una nueva tecnologa de acceso a datos sin que sta estuviera habilitada para LINQ. El sabor de LINQ que hace posible las consultas integradas sobre los modelos de entidades se llama precisamente LINQ to Entities (L2E), y ha sido construido sobre la base de Object Services.

Pgina 18

Universidad de El Salvador.

Dando vida a los modelos


Un enfoque de diseo habitual para crear una aplicacin o un servicio consiste en dividir la aplicacin o el servicio en tres partes: un modelo de dominio, un modelo lgico y un modelo fsico. El modelo de dominio 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 de dominio 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 de dominio (denominado modelo conceptual en Entity Framework ) 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. El modelo conceptual, el modelo de almacenamiento y las asignaciones entre los dos se expresan en esquemas basados en XML y se definen en archivos que tienen extensiones de nombre correspondientes: El lenguaje de definicin de esquemas conceptuales (CSDL) define el modelo conceptual. CSDL es la implementacin de Entity Framework del Entity Data Model. La extensin de archivo es .csdl. El lenguaje de definicin de esquemas de almacenamiento (SSDL) define el modelo de almacenamiento, que tambin se denomina modelo lgico. La extensin de archivo es .ssdl. El lenguaje de especificacin de asignaciones (MSL) define las asignaciones entre los modelos conceptual y de almacenamiento. La extensin de archivo es .msl. El modelo de almacenamiento y las asignaciones pueden cambiar segn sea necesario sin requerir cambios en 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.

Pgina 19

Universidad de El Salvador.

Entity Framework utiliza estos modelos y archivos de asignacin 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. Entity Framework incluso permite asignar las entidades del modelo conceptual a los procedimientos almacenados en el origen de datos.

Generacin de modelos.
Las aplicaciones y servicios de Entity Framework se basan en informacin de modelos y asignaciones que se expresa en tres lenguajes basados en XML:

1. Lenguaje de definicin de esquemas conceptuales (CSDL) El lenguaje de definicin de esquemas conceptuales (CSDL) es un lenguaje basado en XML que describe las entidades, las relaciones y las funciones que conforman un modelo conceptual de una aplicacin controlada por datos. Entity Framework y ADO.NET Data Services pueden usar este modelo conceptual. Entity Framework usa los metadatos descritos mediante CSDL para asignar entidades y relaciones definidas en un modelo conceptual a un origen de datos. Para obtener ms informacin, vea Especificacin SSDL y Especificacin MSL. CSDL es la implementacin de Entity Framework de Entity Data Model. En una aplicacin de Entity Framework , los datos del modelo conceptual se cargan desde un archivo .csdl (escrito en CSDL) en una instancia de la clase System.Data.Metadata.Edm.EdmItemCollection, y se puede obtener acceso a ellos usando mtodos de la clase System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework usa los datos del modelo conceptual para convertir las consultas realizadas en dicho modelo en comandos especficos del origen de datos. 2. Lenguaje de definicin de esquemas de almacenamiento (SSDL) El lenguaje de definicin de esquemas de almacenamiento (SSDL) es un lenguaje basado en XML que describe el modelo de almacenamiento de una aplicacin Entity Framework. En una aplicacin de Entity Framework, los metadatos del modelo de almacenamiento se cargan desde un archivo .ssdl (escrito en SSDL) en una instancia de System.Data.Metadata.Edm.StoreItemCollection y son accesibles a travs de mtodos de la clase System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework usa los

Pgina 20

Universidad de El Salvador.
metadatos del modelo de almacenamiento para convertir las consultas realizadas sobre el modelo conceptual en comandos especficos del almacenamiento. 3. Lenguaje de especificacin de asignaciones (MSL) El lenguaje de especificacin de asignaciones (MSL) es un lenguaje basado en XML que describe la asignacin entre el modelo conceptual y el modelo de almacenamiento de una aplicacin de Entity Framework . En una aplicacin de Entity Framework , los metadatos de asignacin se cargan desde un archivo .msl (escrito en MSL) en tiempo de compilacin. Entity Framework usa los metadatos de asignacin en tiempo de ejecucin para convertir las consultas realizadas contra el modelo conceptual en comandos especficos del almacenamiento.

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, el ajuste no es perfecto. Varias tablas normalizadas suelen corresponder a una sola clase y las relaciones entre las clases se representan a menudo de forma diferente a las relaciones entre tablas. Por ejemplo, para representar el cliente de un pedido de ventas, una clase Order podra utilizar una propiedad que contiene una referencia a una instancia de una clase Customer, mientras que 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, mientras que la tabla Customer en una base de datos no tiene ninguna columna comparable. Entity Framework proporciona a los desarrolladores de software la flexibilidad para representar las relaciones de esta manera, o para modelar ms estrechamente las relaciones tal como se representan en la base de datos. Para obtener ms informacin, vea Definir y administrar relaciones (Entity Framework). 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 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. De forma predeterminada, las clases que se generan para un modelo conceptual determinado derivan de las clases base que proporcionan

Pgina 21

Universidad de El Salvador.
servicios para materializar las entidades como objetos y para realizar un seguimiento de los cambios y guardarlos. Los desarrolladores pueden utilizar estas clases para trabajar con las entidades y relaciones como objetos relacionados mediante asociaciones. Los desarrolladores tambin pueden personalizar las clases que se generan para un modelo conceptual.

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. Entity Framework usa la informacin de los archivos del modelo y de asignacin 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 objetos que Entity Framework administra. Entity Framework proporciona las maneras siguientes de consultar un modelo conceptual 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. Un dialecto de SQL, independiente del almacenamiento, que trabaja directamente con entidades del modelo conceptual y que admite conceptos de Entity Data Model . Entity SQL se utiliza tanto con consultas de objeto como con consultas que se ejecutan utilizando el proveedor EntityClient. Mtodos del generador de consultas. Estos mtodos permiten construir consultas de Entity SQL utilizando 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 Entity Framework usa para materializar los datos de la entidad en los objetos.

Pgina 22

Universidad de El Salvador.
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 consultas 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:

Las herramientas de Entity Data Model pueden generar 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. Para obtener ms informacin, vea Crear, agregar, modificar y eliminar objetos (Entity Framework).

Pgina 23

Universidad de El Salvador.

Proveedores de datos
El proveedor EntityClient extiende el modelo de proveedor de ADO.NET teniendo acceso a los datos en lo que respecta a las entidades conceptuales y relaciones. Ejecuta consultas que utilizan Entity SQL . Entity SQL proporciona el lenguaje de consultas subyacente que permite a EntityClient comunicarse con la base de datos. Entity Framework incluye un proveedor de datos SqlClient actualizado que admite los rboles de comandos cannicos.

Herramientas de Entity Data Model


Junto con el motor de ejecucin de Entity Framework , .NET Framework versin 4 incluye el Generador de EDM (EdmGen.exe). Esta utilidad de lnea de comandos se conecta a un origen de datos y genera archivos del modelo y de asignacin basados 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 2010 incluye una variada compatibilidad con las herramientas que permiten generar y mantener archivos de modelo y de asignacin 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 asignan a varias tablas.

Asignar un modelo conceptual a un modelo de almacenamiento


Entity Framework usa un modelo conceptual para proporcionar una vista de los datos centrada en objetos, expresados como tipos de entidad y asociaciones. Los desarrolladores de aplicaciones solo tienen que dedicarse a programar con las clases generadas a partir del modelo conceptual, en lugar de tener que pensar tambin en el esquema de almacenamiento y en la forma de obtener acceso a los objetos del almacn de datos y transformarlos en objetos de programacin. Entity Framework usa un modelo conceptual, un modelo de almacenamiento y la asignacin entre ambos modelos para transformar las operaciones de creacin, lectura, actualizacin y eliminacin de las entidades en las operaciones equivalentes en el origen de datos.

Pgina 24

Universidad de El Salvador.

Modelo conceptual
El modelo conceptual para una aplicacin expresa entidades y relaciones en el lenguaje de definicin de esquemas conceptuales (CSDL), que es una implementacin de Entity Data Model. CSDL es un lenguaje basado en XML. Cada uno de los tipos de entidad definidos en CSDL tiene un nombre, una clave para identificar de forma nica las instancias, y un conjunto de propiedades. Los tipos de datos asignados a propiedades se especifican como tipos simples, que son propiedades escalares, o como tipos complejos, que son tipos que estn compuestos de una o ms propiedades escalares o complejas. Los atributos XML tambin pueden especificar la posibilidad de aceptar NULL o asignar un valor predeterminado. Las asociaciones definen las relaciones entre las entidades. Los elementos y la terminologa del lenguaje Entity Framework se explican con ms detalle en Terminologa de Entity Framework. El fragmento XML siguiente representa parte del modelo conceptual School (basado en la base de datos de ejemplo School). En el ejemplo se muestran los tipos de entidad Department y Course que estn relacionados por la asociacin FK_Course_Department; las dems entidades y asociaciones se han quitado:
<Schema Namespace="SchoolModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation " xmlns="http://schemas.microsoft.com/ado/2008/09/edm"> <EntityContainer Name="SchoolEntities"> <EntitySet Name="Courses" EntityType="SchoolModel.Course" /> <EntitySet Name="Departments" EntityType="SchoolModel.Department" /> <AssociationSet Name="FK_Course_Department" Association="SchoolModel.FK_Course_Department"> <End Role="Department" EntitySet="Departments" /> <End Role="Course" EntitySet="Courses" /> </AssociationSet> </EntityContainer> <EntityType Name="Course"> <Key> <PropertyRef Name="CourseID" /> </Key> <Property Name="CourseID" Type="Int32" Nullable="false" /> <Property Name="Title" Type="String" Nullable="false" MaxLength="100" Unicode="true" FixedLength="false" /> <Property Name="Credits" Type="Int32" Nullable="false" /> <Property Name="DepartmentID" Type="Int32" Nullable="false" /> <NavigationProperty Name="Department" Relationship="SchoolModel.FK_Course_Department" FromRole="Course" ToRole="Department" /> </EntityType>

Pgina 25

Universidad de El Salvador.

<EntityType Name="Department"> <Key> <PropertyRef Name="DepartmentID" /> </Key> <Property Name="DepartmentID" Type="Int32" Nullable="false" /> <Property Name="Name" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" /> <Property Name="Budget" Type="Decimal" Nullable="false" Precision="19" Scale="4" /> <Property Name="StartDate" Type="DateTime" Nullable="false" /> <Property Name="Administrator" Type="Int32" /> <NavigationProperty Name="Courses" Relationship="SchoolModel.FK_Course_Department" FromRole="Department" ToRole="Course" /> </EntityType> <Association Name="FK_Course_Department"> <End Role="Department" Type="SchoolModel.Department" Multiplicity="1" /> <End Role="Course" Type="SchoolModel.Course" Multiplicity="*" /> <ReferentialConstraint> <Principal Role="Department"> <PropertyRef Name="DepartmentID" /> </Principal> <Dependent Role="Course"> <PropertyRef Name="DepartmentID" /> </Dependent> </ReferentialConstraint> </Association> </Schema>

Modelo de almacenamiento
El modelo de almacenamiento se describe mediante el lenguaje de definicin de esquemas de almacenamiento (SSDL). Los tipos de datos de las propiedades declaradas en SSDL son los del modelo de almacenamiento. Este fragmento de modelo de almacenamiento muestra un ejemplo de metadatos de almacenamiento para las tablas Course y Department de la base de datos School que estn relacionadas por la clave externa FK_Course_Department; las dems entidades y asociaciones se han quitado:
<Schema Namespace="SchoolModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSche maGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">

Pgina 26

Universidad de El Salvador.
<EntityContainer Name="SchoolModelStoreContainer"> <EntitySet Name="Course" EntityType="SchoolModel.Store.Course" store:Type="Tables" Schema="dbo" /> <EntitySet Name="Department" EntityType="SchoolModel.Store.Department" store:Type="Tables" Schema="dbo" /> <AssociationSet Name="FK_Course_Department" Association="SchoolModel.Store.FK_Course_Department"> <End Role="Department" EntitySet="Department" /> <End Role="Course" EntitySet="Course" /> </AssociationSet> </EntityContainer> <EntityType Name="Course"> <Key> <PropertyRef Name="CourseID" /> </Key> <Property Name="CourseID" Type="int" Nullable="false" /> <Property Name="Title" Type="nvarchar" Nullable="false" MaxLength="100" /> <Property Name="Credits" Type="int" Nullable="false" /> <Property Name="DepartmentID" Type="int" Nullable="false" /> </EntityType> <EntityType Name="Department"> <Key> <PropertyRef Name="DepartmentID" /> </Key> <Property Name="DepartmentID" Type="int" Nullable="false" /> <Property Name="Name" Type="nvarchar" Nullable="false" MaxLength="50" /> <Property Name="Budget" Type="money" Nullable="false" /> <Property Name="StartDate" Type="datetime" Nullable="false" /> <Property Name="Administrator" Type="int" /> </EntityType> <Association Name="FK_Course_Department"> <End Role="Department" Type="SchoolModel.Store.Department" Multiplicity="1" /> <End Role="Course" Type="SchoolModel.Store.Course" Multiplicity="*" /> <ReferentialConstraint> <Principal Role="Department"> <PropertyRef Name="DepartmentID" /> </Principal> <Dependent Role="Course"> <PropertyRef Name="DepartmentID" /> </Dependent> </ReferentialConstraint> </Association> </Schema>

Pgina 27

Universidad de El Salvador.

Especificacin de asignaciones
Una especificacin de asignaciones usa el lenguaje de especificacin de asignaciones (MSL) para asignar el modelo conceptual al modelo de almacenamiento. El siguiente fragmento de MSL muestra una asignacin unvoca entre los modelos conceptual y de almacenamiento para las entidades Department y Course del modelo School:

<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs"> <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer" CdmEntityContainer="SchoolEntities"> <EntitySetMapping Name="Courses"> <EntityTypeMapping TypeName="SchoolModel.Course"> <MappingFragment StoreEntitySet="Course"> <ScalarProperty Name="CourseID" ColumnName="CourseID" /> <ScalarProperty Name="Title" ColumnName="Title" /> <ScalarProperty Name="Credits" ColumnName="Credits" /> <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> <EntitySetMapping Name="Departments"> <EntityTypeMapping TypeName="SchoolModel.Department"> <MappingFragment StoreEntitySet="Department"> <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" /> <ScalarProperty Name="Name" ColumnName="Name" /> <ScalarProperty Name="Budget" ColumnName="Budget" /> <ScalarProperty Name="StartDate" ColumnName="StartDate" /> <ScalarProperty Name="Administrator" ColumnName="Administrator" /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> </EntityContainerMapping> </Mapping>

Trabajando con datos de entidad.


Entity Framework compila metadatos de un modelo conceptual y un modelo de almacenamiento, junto con las asignaciones entre esos modelos, en pares bidireccionales de instrucciones Entity SQL con la denominacin vistas de cliente. Estas vistas controlan el procesamiento de consultas y actualizaciones en el motor en tiempo de ejecucin. El compilador de asignaciones que genera las

Pgina 28

Universidad de El Salvador.
vistas se puede invocar en tiempo de diseo o en tiempo de ejecucin cuando la primera consulta se ejecuta contra un modelo conceptual. Entity Framework se basa en proveedores de datos ADO.NET especficos del almacenamiento proporcionando un objeto EntityConnection a un proveedor de datos y un origen de datos subyacentes. Cuando se ejecuta una consulta, se analiza y se convierte en un rbol de comandos cannico, que es una representacin del modelo de objetos de la consulta. Los rboles de comandos cannicos representan comandos SELECT, UPDATE, INSERT y DELETE. La totalidad del procesamiento subsiguiente se realiza en el rbol de comandos, que es el medio de comunicacin entre el proveedor de System.Data.EntityClient y el proveedor de datos de .NET Framework subyacente, como System.Data.SqlClient.

Consultar objetos
Las Herramientas de Entity Data Model de ADO.NET generan una clase derivada de ObjectContext que representa el contenedor de entidades que se define en el modelo conceptual. La clase ObjectContext admite consultas contra un modelo conceptual que devuelve entidades como objetos, as como la creacin, actualizacin y eliminacin de objetos entidad. Entity Framework admite consultas de objeto contra un modelo conceptual. Las consultas se pueden crear utilizando mtodos del generador de consultas de objeto, Language-Integrated Query (LINQ) y Entity SQL . En un modelo conceptual, las entidades se relacionan entre s mediante asociaciones. En la capa de objeto, estas asociaciones estn representadas por propiedades que exponen colecciones de objetos relacionados de acuerdo con una referencia de entidad. Por ejemplo, en el modelo School, Department.Course obtiene una coleccin de entidad de objetos Course basada en la asociacin entre Course y Department. Si la propiedad LazyLoadingEnabled de la clase ObjectContext tiene el valor false, los objetos a los que se hace referencia no se cargan automticamente, y se debe llamar al mtodo Load de la referencia de entidad para cargar los datos de los objetos relacionados en el contexto de los objetos. Tambin puede especificar la ruta de una consulta que defina qu objetos relacionados se han de cargar con los objetos devueltos. Para obtener ms informacin, vea Consultar un modelo conceptual (Entity Framework). En el ejemplo siguiente se muestra una consulta que, cuando se ejecuta, recupera todos los objetos Department. Una definicin de la ruta de una consulta garantiza que tambin se devuelvan los objetos Course relacionados con los objetos Department. Una clusula ORDER BY de Entity SQL ordena los objetos devueltos por Name:
// Define a query that returns all Department // objects and course objects, ordered by name.

Pgina 29

Universidad de El Salvador.
var departmentQuery = from d in schoolContext.Departments.Include("Courses") orderby d.Name select d;

Trabajar con objetos


Un objeto en un contexto del objeto es una representacin de tipo de entidad de datos en el origen de datos. Puede modificar, crear y eliminar objetos en un contexto del objeto. El contexto del objeto administra las identidades y relaciones entre objetos. Tambin puede serializar objetos y enlazarlos a controles. Para obtener ms informacin, vea Trabajar con objetos (Entity Framework). En el ejemplo siguiente obtenemos una coleccin de objetos Course relacionados con un objeto Department y se enlaza la coleccin a un control DataGridView:
//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.Courses;

Entity Framework realiza el seguimiento de los cambios en los datos de entidad y permite conservar los cambios en el origen de datos.

Pgina 30

Universidad de El Salvador.

Ejemplo utilizado.
Los ejemplo utilizados a lo largo de este documento se refieren a una base de datos de ejemplo denominada School. La base de datos School contiene las tablas siguientes que podrn observarse en el siguiente diagrama de bases de datos de sql:

Esta base de datos de ejemplo resalta muchos de los escenarios de modelos complejos admitidos por las herramientas de Entity Data Model. El script crea las relaciones entre las tablas e inserta datos de ejemplo para que pueda ejecutar los ejemplos y ver cmo trabajan. A continuacin se muestra el modelo School mostrado en el ADO.NET Entity Data Model Designer:

Pgina 31

Universidad de El Salvador.

Para el ejemplo hemos utilizado 2 formularios, uno al que llamaremos Visor del Curso e Informacin. A continuacin se describen cada uno de ellos de forma individual, junto con su codificacin respectiva. Puede consultar tambin el demo adjunto a este documento, que contiene este ejemplo descrito a continuacin, para su respectiva prueba.

Formulario 1.

Figura 1. Captura de la interfaz de nuestro formulario visor del curso

Pgina 32

Universidad de El Salvador.
Cdigo del formulario 1.
using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; System.Data.Objects; System.Data.Objects.DataClasses;

namespace CourseManager { public partial class CourseViewer : Form { private SchoolEntities schoolContext; public CourseViewer() { InitializeComponent(); } private void closeForm_Click(object sender, EventArgs e) { this.Close(); schoolContext.Dispose(); } private void CourseViewer_Load(object sender, EventArgs e) { //creamos el objecto ObjectContext schoolContext = new SchoolEntities();

// se define una consulta que devuelva todos los objetos departments y // los objetos course ordenados por su nombre var departmentQuery = from d in schoolContext.Departments.Include("Courses") orderby d.Name select d; try { // enlazamos el ComboBox a la consulta, // la cual se ejecuta durante el enlace a los datos. //Para evitar que la consulta se ejecute varias veces durante el // enlace con los datos, se recomienda enlazar los controles con // el resultado del metodo excute. this.departmentList.DisplayMember = "Name"; this.departmentList.DataSource = ((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly); } catch (Exception ex) { MessageBox.Show(ex.Message);

Pgina 33

Universidad de El Salvador.
} } private void departmentList_SelectedIndexChanged(object sender, EventArgs e) { try { //obtenemos el objeto para el departamnt selecionado. Department department = (Department)this.departmentList.SelectedItem; //agregamosa al gridview la coleccion de objetos course // que estan relacionados con el objecto department selecionado courseGridView.DataSource = department.Courses;

courseGridView.Columns["Department"].Visible = false; courseGridView.Columns["StudentGrades"].Visible = false; courseGridView.Columns["OnlineCourse"].Visible = false; courseGridView.Columns["OnsiteCourse"].Visible = false; courseGridView.Columns["People"].Visible = false; courseGridView.Columns["DepartmentId"].Visible = false; courseGridView.AllowUserToDeleteRows = false; courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void saveChanges_Click(object sender, EventArgs e) { try { // guardamo los cambios en los objectos de la base de datos // y desplegamos un msg mostrando que el formulario se actualizo schoolContext.SaveChanges(); MessageBox.Show("los cambios han sido guardados en la bd."); this.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void butinformation_Click(object sender, EventArgs e) { informacion info = new informacion(); info.Show(); }

Pgina 34

Universidad de El Salvador.

private void button1_Click(object sender, EventArgs e) { var departmentQuery = from d in schoolContext.Departments.Include("Courses") orderby d.Name select d; try { this.departmentList.DisplayMember = "Name"; this.departmentList.DataSource = ((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }

Pgina 35

Universidad de El Salvador.
Formulario 2.

Figura 2. Vista de nuestro Formulario Informacin

Cdigo del formulario 2.

using using using using using using using using using using

System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; System.Data.Objects; System.Data.Objects.DataClasses;

Pgina 36

Universidad de El Salvador.
namespace CourseManager { public partial class informacion : Form { private SchoolEntities schoolContext; public informacion() { InitializeComponent(); } private void informacion_Load(object sender, EventArgs e) { schoolContext = new SchoolEntities(); var departmentQuery = from d in schoolContext.Departments.Include("Courses") orderby d.Name select d; try { this.departmentList.DisplayMember = "Name"; this.departmentList.DataSource = ((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly); this.comboDepartment.DisplayMember = "Name"; this.comboDepartment.DataSource = ((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void butSave_Click(object sender, EventArgs e) { Department department = (Department)this.departmentList.SelectedItem; Course objcourse = new Course(); objcourse.CourseID = (int)this.IDcurso.Value; objcourse.Title = this.titulo.Text; objcourse.Credits =(int)this.creditos.Value; objcourse.DepartmentID = department.DepartmentID; schoolContext.Courses.AddObject(objcourse); schoolContext.SaveChanges(); MessageBox.Show("Registro Guardado"); this.Refresh(); } private void comboDepartment_SelectedIndexChanged(object sender, EventArgs e) { try { Department department = (Department)this.comboDepartment.SelectedItem; courseGridView.DataSource = department.Courses;

Pgina 37

Universidad de El Salvador.
courseGridView.Columns["Department"].Visible = false; courseGridView.Columns["StudentGrades"].Visible = false; courseGridView.Columns["OnlineCourse"].Visible = false; courseGridView.Columns["OnsiteCourse"].Visible = false; courseGridView.Columns["People"].Visible = false; courseGridView.Columns["DepartmentId"].Visible = false; courseGridView.AllowUserToDeleteRows = false; courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void butborrar_Click(object sender, EventArgs e) { try { int id = int.Parse(courseGridView.SelectedRows[0].Cells[0].Value.ToString()); schoolContext.BorrarCurso(id); schoolContext.SaveChanges(); MessageBox.Show("Elemento borrado"); this.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button1_Click(object sender, EventArgs e) { var queryCourse = schoolContext.RecuperarCursos(); courseGridView.DataSource = queryCourse; } } }

Pgina 38

Universidad de El Salvador.
Nuestro modelo Entity lucira as:

Pgina 39

Universidad de El Salvador.
Script para crear la base de datos en SQL y el esquema.
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]( [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,

Pgina 40

Universidad de El Salvador.
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, CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED ( [CourseID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO --Create the StudentGrade table. 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]

Pgina 41

Universidad de El Salvador.
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] 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

Pgina 42

Universidad de El Salvador.
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 StudentGrade and Course. IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Course]') AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]')) ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD CONSTRAINT [FK_StudentGrade_Course] FOREIGN KEY([CourseID]) REFERENCES [dbo].[Course] ([CourseID]) GO ALTER TABLE [dbo].[StudentGrade] CHECK CONSTRAINT [FK_StudentGrade_Course] GO --Define the relationship between StudentGrade and Student. IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Student]') AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]')) ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD CONSTRAINT [FK_StudentGrade_Student] FOREIGN KEY([StudentID]) REFERENCES [dbo].[Person] ([PersonID]) GO ALTER TABLE [dbo].[StudentGrade] CHECK CONSTRAINT [FK_StudentGrade_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

Pgina 43

Universidad de El Salvador.
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. 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

Pgina 44

Universidad de El Salvador.
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. 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'

Pgina 45

Universidad de El Salvador.
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 GO -- Create GetStudentGrades stored procedure. IF NOT EXISTS (SELECT * FROM sys.objects

Pgina 46

Universidad de El Salvador.
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 -- Create GetDepartmentName stored procedure. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetDepartmentName]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[GetDepartmentName] @ID int, @Name nvarchar(50) OUTPUT AS SELECT @Name = Name FROM Department WHERE DepartmentID = @ID ' 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, EnrollmentDate) VALUES (1, 'Abercrombie', 'Kim', '1995-03-11', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, EnrollmentDate) VALUES (2, 'Barzdukas', 'Gytis', null, '2005-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, EnrollmentDate) VALUES (3, 'Justice', 'Peggy', null, '2001-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, EnrollmentDate) VALUES (4, 'Fakhouri', 'Fadi', '2002-08-06', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, EnrollmentDate) VALUES (5, 'Harui', 'Roger', '1998-07-01', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, EnrollmentDate) VALUES (6, 'Li', 'Yan', null, '2002-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, EnrollmentDate)

HireDate,

HireDate,

HireDate,

HireDate,

HireDate,

HireDate,

HireDate,

Pgina 47

Universidad de El Salvador.
VALUES (7, 'Norman', 'Laura', null, '2003-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (8, 'Olivotto', 'Nino', null, '2005-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (9, 'Tang', 'Wayne', null, '2005-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (10, 'Alonso', 'Meredith', null, '2002-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (11, 'Lopez', 'Sophia', null, '2004-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (12, 'Browning', 'Meredith', null, '2000-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (13, 'Anand', 'Arturo', null, '2003-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (14, 'Walker', 'Alexandra', null, '2000-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (15, 'Powell', 'Carson', null, '2004-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (16, 'Jai', 'Damien', null, '2001-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (17, 'Carlson', 'Robyn', null, '2005-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (18, 'Zheng', 'Roger', '2004-02-12', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (19, 'Bryant', 'Carson', null, '2001-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (20, 'Suarez', 'Robyn', null, '2004-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (21, 'Holt', 'Roger', null, '2004-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (22, 'Alexander', 'Carson', null, '2005-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (23, 'Morgan', 'Isaiah', null, '2001-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (24, 'Martin', 'Randall', null, '2005-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (25, 'Kapoor', 'Candace', '2001-01-15', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate)

Pgina 48

Universidad de El Salvador.
VALUES (26, 'Rogers', 'Cody', null, '2002-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (27, 'Serrano', 'Stacy', '1999-06-01', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (28, 'White', 'Anthony', null, '2001-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (29, 'Griffin', 'Rachel', null, '2004-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (30, 'Shan', 'Alicia', null, '2003-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (31, 'Stewart', 'Jasmine', '1997-10-12', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (32, 'Xu', 'Kristen', '2001-7-23', null); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) VALUES (33, 'Gao', 'Erica', null, '2003-01-30'); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) 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, StartDate, Administrator) VALUES (1, 'Engineering', 350000.00, '2007-09-01', 2); INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) VALUES (2, 'English', 120000.00, '2007-09-01', 6); INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) VALUES (4, 'Economics', 200000.00, '2007-09-01', 4); INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) 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, VALUES (2021, 'Composition', 3, 2); INSERT INTO dbo.Course (CourseID, Title,

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

Pgina 49

Universidad de El Salvador.
VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES GO (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)

-- 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 --Insert data into the OfficeAssignment table.

Pgina 50

Universidad de El Salvador.
INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INTO dbo.OfficeAssignment(InstructorID, (1, '17 Smith'); INTO dbo.OfficeAssignment(InstructorID, (4, '29 Adams'); INTO dbo.OfficeAssignment(InstructorID, (5, '37 Williams'); INTO dbo.OfficeAssignment(InstructorID, (18, '143 Smith'); INTO dbo.OfficeAssignment(InstructorID, (25, '57 Adams'); INTO dbo.OfficeAssignment(InstructorID, (27, '271 Williams'); INTO dbo.OfficeAssignment(InstructorID, (31, '131 Smith'); INTO dbo.OfficeAssignment(InstructorID, (32, '203 Williams'); INTO dbo.OfficeAssignment(InstructorID, (34, '213 Smith'); Location) Location) Location) Location) Location) Location) Location) Location) Location)

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

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

Pgina 51

Universidad de El Salvador.
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.StudentGrade (4022, 15, 2.5); INTO dbo.StudentGrade (4022, 16, 2); INTO dbo.StudentGrade (4022, 17, null); INTO dbo.StudentGrade (4022, 19, 3.5); INTO dbo.StudentGrade (4061, 20, 4); INTO dbo.StudentGrade (4061, 21, 2); INTO dbo.StudentGrade (4022, 22, 3); INTO dbo.StudentGrade (4041, 22, 3.5); INTO dbo.StudentGrade (4061, 22, 2.5); INTO dbo.StudentGrade (4022, 23, 3); INTO dbo.StudentGrade (1045, 23, 1.5); INTO dbo.StudentGrade (1061, 24, 4); INTO dbo.StudentGrade (1061, 25, 3); INTO dbo.StudentGrade (1050, 26, 3.5); INTO dbo.StudentGrade (1061, 26, 3); INTO dbo.StudentGrade (1061, 27, 3); INTO dbo.StudentGrade (1045, 28, 2.5); INTO dbo.StudentGrade (1050, 28, 3.5); INTO dbo.StudentGrade (1061, 29, 4); INTO dbo.StudentGrade (1050, 30, 3.5); INTO dbo.StudentGrade (1061, 30, 4);

(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)

Pgina 52

Universidad de El Salvador.

Bibliografa.
www.msdn.microsoft.com Entity Framework Learning Guide (Zeeshan Hirani) ADO.NET Entity Framework 4.0 (Unai - Zorrilla - Castro)

Pgina 53