entity net framework

53
2011 Universidad de El Salvador. Facultad Multidisciplinaria de Occidente. Departamento de ingeniería y Arquitectura. Presentado por: Juan José Abarca Mena. Kelvin Geovanni Chicas. Walter Arévalo Moran. Luis Ernesto Martínez. Wallace Steed Velasquez. 23/05/2011 Entity Framework.Net

Upload: wallace-steed

Post on 05-Jul-2015

2.597 views

Category:

Documents


2 download

DESCRIPTION

trabajo de bases de datos 2009

TRANSCRIPT

Page 1: Entity Net Framework

2011

Universidad de El Salvador.

Facultad Multidisciplinaria de Occidente.

Departamento de ingeniería y Arquitectura.

Presentado por:

Juan José Abarca Mena.

Kelvin Geovanni Chicas.

Walter Arévalo Moran.

Luis Ernesto Martínez.

Wallace Steed Velasquez.

23/05/2011

Entity Framework.Net

Page 2: Entity Net Framework

Página 2

Universidad de El Salvador.

Introducción.

ADO.NET Entity Framework admite aplicaciones y servicios centrados en datos, y proporciona una

plataforma para la programación con datos que eleva el nivel de abstracción del nivel lógico

relacional al nivel conceptual. Al permitir a los programadores trabajar con datos en un nivel de

abstracción superior, Entity Framework admite código que es independiente de cualquier motor

de almacenamiento de datos o esquema relacional determinados. Para obtener más información,

vea Información 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 información sobre la asignación, el modelo

conceptual y el de almacenamiento se almacena en un archivo .edmx. Entity Framework también

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 basándose en una

base de datos existente. Esto reduce en gran medida el código de acceso a datos que se solía

necesitar para crear aplicaciones y servicios de datos basados en objetos, y agiliza la creación de

servicios y aplicaciones de datos orientadas a objetos a partir de una base de datos existente. Las

herramientas también permiten compilar en primer lugar un modelo conceptual y, a continuación,

generar automáticamente los objetos de CLR relacionados y una base de datos auxiliar.

Page 3: Entity Net Framework

Página 3

Universidad de El Salvador.

¿Qué es Entity Framework. Net?

Entity Framework es un conjunto de tecnologías 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 lógica de los problemas empresariales que resuelven, y

también 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 código de aplicación eficaz y fácil de mantener.

Entity Framework permite a los programadores trabajar con datos en forma de objetos y

propiedades específicos 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 más

alto de abstracción cuando tratan con datos, y puede crear y mantener aplicaciones orientadas a

datos con menos código 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 versión 3.5 SP1.

Page 4: Entity Net Framework

Página 4

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 diseño 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 organización lógica de eso tipos es tal y como se

muestra en la tabla a continuación. 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.

Page 5: Entity Net Framework

Página 5

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 específicos. Una de las características más 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 añadido para aquellas empresas que quieran colocar su producto en el mercado. La

Page 6: Entity Net Framework

Página 6

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 diseñador 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 continuación pasaremos a detallar el funcionamiento y objetivo de cada una de

ellas:

Page 7: Entity Net Framework

Página 7

Universidad de El Salvador.

Diseñador de modelos EDM (Entity Data Model Designer)

El diseñador de modelos es una herramienta visual integrada dentro de Visual Studio 2010 que

permite crear y editar modelos conceptuales. Este diseñador está formado por los siguientes

componentes:

• Una superficie de diseño 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 navegación por el modelo, en la cual podremos ver arboles de

información sobre el modelo conceptual y el modelo físico.

• Nuevos elementos dentro de la ventana de herramientas, que nos permitirán, por

ejemplo, crear las entidades, las asociaciones o relaciones de herencia.

El diseñador de modelos opera sobre ficheros de tipo edmx. Estos ficheros se forman mediante la

combinación de tres secciones de metadatos en formato XML (que en ocasiones pueden

presentarse también 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 definición 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 navegación o

asociación es entre las distintas entidades.

• Para terminar, el archivo edmx contiene la sección MSL (Mapping Schema Language),

también conocida como sección C-S, mediante la cual se especifican como se asocian

o relacionan las entidades del modelo conceptual (definido en la sección CSDK) con las

tablas, vistas, columnas, etc. Del modelo físico definido en la sección SSDL.

Page 8: Entity Net Framework

Página 8

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 continuación) crea un nuevo archivo

edmx y lo agrega al proyecto en el que estemos trabajando. La siguiente figura, nos muestra un

ejemplo de un diseñador EDM y las distintas ventanas de herramientas con las que podemos

trabajar:

Figura 3. Diseñador de EDM integrado en Visual Studio 2010.

Page 9: Entity Net Framework

Página 9

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 diseñador. Para ello, este asistente permite crear el modelo

a partir de una base de datos ya existente (la practica más habitual a aunque no la única).

Con el fin de mostrar el asistente mencionado realizaremos un sencillo ejemplo, en realidad, el

propósito del mismo es mas enseñarle 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 aplicación 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.

Page 10: Entity Net Framework

Página 10

Universidad de El Salvador.

Figura 5. Agregando un modelo de EDM

Figura 6. Asistente de creación del modelo conceptual

Page 11: Entity Net Framework

Página 11

Universidad de El Salvador.

Figura 7. Asistente de creación 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:

Page 12: Entity Net Framework

Página 12

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 diseñador 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

opción “Abrir con” su menú contextual y elegir el editor de XML. Verá como ahora en vez del

diseñador se muestra un archivo XML con las distintas secciones de metadatos (figuras 9 y 10).

Figura 9. Selección de un editor para un archivo EDMX.

Figura 10. Vista XML de un archivo EDMX.

Page 13: Entity Net Framework

Página 13

Universidad de El Salvador.

Asistente de actualización de modelos.

Esta herramienta se utiliza para actualizar el modelo EDM después 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 opción actualizar

modelo desde la base de datos. El asistente de actualización de modelos pone a nuestra

disposición tres pestañas de trabajo:

Opción Descripción Agregar Permite incorporar al modelo nuevos

elementos del esquema de la base de datos.

Refrescar Muestra los elementos actuales en el modelo y permite seleccionar aquellos cuya definición queramos refrescar o

actualizar.

Eliminar Muestra los elementos actuales en el modelo y permite seleccionar cuales no deseamos que pertenezcan a l.

Tabla 3. Tabla de actualización de modelos.

A continuación se muestra un sencillo ejemplo del uso del asistente de actualización de un modelo

EDM. Lo único que se hará es agregar una nueva columna a la tabla Customer con el fin de

especificar su número de pasaporte, PassportNumber. Una vez agregada la columna en el modelo

relacional con el que estamos trabajando, seleccionaremos la ventana de navegación del

modelo y haremos clic en la opción de actualización del modelo conceptual que tenemos en su

menú contextual.

Figura 11. Actualización del modelo.

Page 14: Entity Net Framework

Página 14

Universidad de El Salvador.

El asistente de actualización nos mostrara las tres opciones de la tabla anterior; en nuestro caso,

seleccionaremos la opción 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 diseñador nos actualiza la información

(figura 13).

Figura 13. Entidad después de actualizar.

Page 15: Entity Net Framework

Página 15

Universidad de El Salvador.

Una vez que se produce la actualización de un modelo, se sobrescribe la sección SSDL del

fichero edmx correspondiente, por lo que si previamente hubiéramos realizado cualquier

modificación sobre él, tales cambios se perderán y no se verán 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 seguirán 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 función de las secciones realizadas en la base de datos subyacente.

Page 16: Entity Net Framework

Página 16

Universidad de El Salvador.

Tabla 4. Cambios en el modelo en función de las acciones.

EDMGen o Generador de EDM

Por último, EDMGen.exe es una herramienta de línea 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 específico de ADO.NET Entity

Framework y generar las secciones SSDL, CSDL y MSL de EDM.

• Validar un modelo existente.

• Producir código fuente a partir de la sección CSDL.

Por defecto, EdmGen se sitúa en el directorio de la instalación 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 algún

proceso avanzado de generación automática de código 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.

Page 17: Entity Net Framework

Página 17

Universidad de El Salvador.

Entity Client Entity Client (o EntityClient, unido, nombre con una connotación más cercana al código) es sin

duda alguna, junto a EDM, uno de los elementos centrales dentro de ADO.NET Entity Framework.

Como seguramente sabremos, desde la versión 2.0 de .NET disponemos de jerarquías de clases

que engloban bajo un mismo “paraguas de herencias” clases necesarias para trabajar con los

proveedores específicos para cada motor de base de datos, como SqlClient u OracleClient. Entity

Client representa un nuevo conjunto de clases que se integran armónicamente dentro de esas

jerarquías .

Figura 14. Jerarquía 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 físicos 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 también a su nivel una arquitectura abierta, y es capaz de trabajar con

diferentes proveedores de Entity Frame específicos, 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 ejecución de dichas consultas y la recuperación 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.

Page 18: Entity Net Framework

Página 18

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 múltiples bases de datos. Pero seguiremos sufriendo el trabajo de la

recuperación 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 materialización). 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 materialización automática de los resultados,

ganaremos también todas las ayudas que el compilador y el entorno integrado pueden ofrecernos,

al estar trabajando en todo momento de una forma fuertemente tipada.

En contraposición al ejemplo del punto anterior, en el que se consultaban datos de un modelo

conceptual usando Entity Client, a continuación podremos ver cómo obtener esos mismos datos

usando Object Services y materializando de forma automática los resultados.

LINQ To Entities, L2E Llegados a este punto, ya hemos visto varias de las múltiples ventajas que nos ofrece Entity Frame,

incluyendo la posibilidad de realizar consultas sobre modelos conceptuales y la materialización

automática de objetos a partir de los resultad os de esas consultas. Sin embargo, si

preguntásemos 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 serán los errores en la escritura de las consultas que crean. Puesto que estas

consultas para el compilador no son más que meras secuencias de caracteres, este no podrá

validarlas ni ayudarnos en la codificación de las mismas, de forma que, aun cuando una consulta

no esté bien formada o sea incorrecta, podremos compilar y ejecutar, quedando la detección de

posibles errores para tiempo de ejecución. La llegada de LINQ abría una vía increíble para salvar

este inconveniente, sentando las bases para la utilización directa de consultas integradas e

nuestro lenguaje de programación. Y por supuesto, Microsoft no podrá sacar a la luz una nueva

tecnología 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.

Page 19: Entity Net Framework

Página 19

Universidad de El Salvador.

Dando vida a los modelos

Un enfoque de diseño habitual para crear una aplicación o un servicio consiste en dividir la

aplicación o el servicio en tres partes: un modelo de dominio, un modelo lógico y un modelo físico.

El modelo de dominio define las entidades y relaciones del sistema que se está modelando. El

modelo lógico de una base de datos relacional normaliza las entidades y relaciones en tablas con

restricciones de claves externas. El modelo físico 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 físico para mejorar el rendimiento, pero

los programadores que escriben el código de la aplicación principalmente se limitan a trabajar con

el modelo lógico 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 aplicación, con frecuencia como diagramas inertes que se ven y se explican en

las primeras etapas de un proyecto, y a continuación se abandonan. Muchos equipos de

desarrolladores omiten la creación 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 específicos del origen de datos. Esto libera a las aplicaciones de las dependencias

codificadas de forma rígida 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 definición de esquemas conceptuales (CSDL) define el modelo conceptual.

CSDL es la implementación de Entity Framework del Entity Data Model. La extensión de

archivo es .csdl.

• El lenguaje de definición de esquemas de almacenamiento (SSDL) define el modelo de

almacenamiento, que también se denomina modelo lógico. La extensión de archivo es

.ssdl.

• El lenguaje de especificación de asignaciones (MSL) define las asignaciones entre los

modelos conceptual y de almacenamiento. La extensión de archivo es .msl.

El modelo de almacenamiento y las asignaciones pueden cambiar según sea necesario sin requerir

cambios en el modelo conceptual, las clases de datos o el código de la aplicación. Dado que los

modelos de almacenamiento son específicos del proveedor, puede trabajar con un modelo

conceptual coherente a través de varios orígenes de datos.

Page 20: Entity Net Framework

Página 20

Universidad de El Salvador.

Entity Framework utiliza estos modelos y archivos de asignación para transformar las operaciones

de creación, lectura, actualización y eliminación 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.

Generación de modelos.

Las aplicaciones y servicios de Entity Framework se basan en información de modelos y

asignaciones que se expresa en tres lenguajes basados en XML:

1. Lenguaje de definición de esquemas conceptuales (CSDL)

El lenguaje de definición 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 aplicación 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 más información, vea Especificación SSDL y

Especificación MSL.

CSDL es la implementación de Entity Framework de Entity Data Model.

En una aplicación 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

métodos 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 específicos del origen de datos.

2. Lenguaje de definición de esquemas de almacenamiento (SSDL)

El lenguaje de definición de esquemas de almacenamiento (SSDL) es un lenguaje basado

en XML que describe el modelo de almacenamiento de una aplicación Entity Framework.

En una aplicación 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 través de métodos de

la clase System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework usa los

Page 21: Entity Net Framework

Página 21

Universidad de El Salvador.

metadatos del modelo de almacenamiento para convertir las consultas realizadas sobre el

modelo conceptual en comandos específicos del almacenamiento.

3. Lenguaje de especificación de asignaciones (MSL)

El lenguaje de especificación de asignaciones (MSL) es un lenguaje basado en XML que

describe la asignación entre el modelo conceptual y el modelo de almacenamiento de una

aplicación de Entity Framework .

En una aplicación de Entity Framework , los metadatos de asignación se cargan desde un

archivo .msl (escrito en MSL) en tiempo de compilación. Entity Framework usa los

metadatos de asignación en tiempo de ejecución para convertir las consultas realizadas

contra el modelo conceptual en comandos específicos del almacenamiento.

Asignar objetos a datos

La programación orientada a objetos supone un desafío al interactuar con sistemas de

almacenamiento de datos. Aunque la organización de clases suele reflejar la organización 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 podría 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 podría tener una propiedad denominada

Orders que contuviera una colección 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 más estrechamente las relaciones tal como se representan en la base

de datos. Para obtener más información, 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 lógicos a las entidades y

relaciones de los modelos conceptuales. Esto permite una mayor flexibilidad al definir los objetos

y optimizar el modelo lógico. Las herramientas de Entity Data Model generan clases de datos

extensibles según 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

Page 22: Entity Net Framework

Página 22

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

también pueden personalizar las clases que se generan para un modelo conceptual.

Obtener acceso a los datos de entidad

y cambiarlos

Como algo más que otra solución de asignación objeto-relacional, Entity Framework trata

fundamentalmente de permitir que las aplicaciones obtengan acceso y cambien los datos que

están representados como entidades y relaciones en el modelo conceptual. Entity Framework usa

la información de los archivos del modelo y de asignación para traducir las consultas de objeto con

los tipos de entidad que se representan en el modelo conceptual en consultas específicas 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.

• Métodos del generador de consultas. Estos métodos permiten construir consultas de

Entity SQL utilizando métodos 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 específicas del origen de datos y

devuelve un lector de datos que Entity Framework usa para materializar los datos de la entidad en

los objetos.

Page 23: Entity Net Framework

Página 23

Universidad de El Salvador.

Cuando no se requiere la materialización de los objetos, el proveedor de EntityClient también se

puede utilizar como un proveedor de datos ADO.NET estándar 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 también expone un método 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 automáticamente o bien por los procedimientos

almacenados que el programador especifica. Para obtener más información, vea Crear, agregar,

modificar y eliminar objetos (Entity Framework).

Page 24: Entity Net Framework

Página 24

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 canónicos.

Herramientas de Entity Data Model

Junto con el motor de ejecución de Entity Framework , .NET Framework versión 4 incluye el

Generador de EDM (EdmGen.exe). Esta utilidad de línea de comandos se conecta a un origen de

datos y genera archivos del modelo y de asignación basados en una asignación unívoca entre las

entidades y las tablas. También 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 asignación en una aplicación de Visual Studio. El Entity Data

Model Designer permite crear escenarios de asignación avanzados, por ejemplo de la herencia de

tabla por tipo y de tabla por jerarquía, y entidades de división 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 también en el esquema de almacenamiento y en la forma de obtener

acceso a los objetos del almacén de datos y transformarlos en objetos de programación.

Entity Framework usa un modelo conceptual, un modelo de almacenamiento y la asignación entre

ambos modelos para transformar las operaciones de creación, lectura, actualización y eliminación

de las entidades en las operaciones equivalentes en el origen de datos.

Page 25: Entity Net Framework

Página 25

Universidad de El Salvador.

Modelo conceptual

El modelo conceptual para una aplicación expresa entidades y relaciones en el lenguaje de

definición de esquemas conceptuales (CSDL), que es una implementación 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 están compuestos de una o más

propiedades escalares o complejas.

Los atributos XML también pueden especificar la posibilidad de aceptar NULL o asignar un valor

predeterminado. Las asociaciones definen las relaciones entre las entidades. Los elementos y la

terminología del lenguaje Entity Framework se explican con más detalle en Terminología 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 están relacionados por la asociación FK_Course_Department; las demás 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="SchoolMode l.Course" /> <EntitySet Name="Departments" EntityType="School Model.Department" /> <AssociationSet Name="FK_Course_Department" Association="SchoolModel.FK_Cours e_Department"> <End Role="Department" EntitySet="Depar tments" /> <End Role="Course" EntitySet="Courses" /> </AssociationSet> </EntityContainer> <EntityType Name="Course"> <Key> <PropertyRef Name="CourseID" /> </Key> <Property Name="CourseID" Type="Int32" Nulla ble="false" /> <Property Name="Title" Type="String" Nullabl e="false" MaxLength="100" Unicode="true" Fix edLength="false" /> <Property Name="Credits" Type="Int32" Nullab le="false" /> <Property Name="DepartmentID" Type="Int32" N ullable="false" /> <NavigationProperty Name="Department" Relationship="SchoolModel.FK _Course_Department" FromRole="Course" ToRole="De partment" /> </EntityType>

Page 26: Entity Net Framework

Página 26

Universidad de El Salvador.

<EntityType Name="Department"> <Key> <PropertyRef Name="DepartmentID" /> </Key> <Property Name="DepartmentID" Type="Int32" N ullable="false" /> <Property Name="Name" Type="String" Nullable ="false" MaxLength="50" Unicode="true" Fixe dLength="false" /> <Property Name="Budget" Type="Decimal" Nulla ble="false" Precision="19" Scale="4" /> <Property Name="StartDate" Type="DateTime" N ullable="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.Depart ment" Multiplicity="1" /> <End Role="Course" Type="SchoolModel.Course" Mu ltiplicity="*" /> <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 definición 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 están

relacionadas por la clave externa FK_Course_Department; las demás entidades y asociaciones se

han quitado:

<Schema Namespace="SchoolModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderMa nifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/ 12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009 /02/edm/ssdl">

Page 27: Entity Net Framework

Página 27

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.Departm ent" store:Type="Tables" Schema="dbo" /> <AssociationSet Name="FK_Course_Department" Association="SchoolModel.Store.FK _Course_Department"> <End Role="Department" EntitySet="Depar tment" /> <End Role="Course" EntitySet="Course" / > </AssociationSet> </EntityContainer> <EntityType Name="Course"> <Key> <PropertyRef Name="CourseID" /> </Key> <Property Name="CourseID" Type="int" Nullabl e="false" /> <Property Name="Title" Type="nvarchar" Nulla ble="false" MaxLength="100" /> <Property Name="Credits" Type="int" Nullable ="false" /> <Property Name="DepartmentID" Type="int" Nul lable="false" /> </EntityType> <EntityType Name="Department"> <Key> <PropertyRef Name="DepartmentID" /> </Key> <Property Name="DepartmentID" Type="int" Nul lable="false" /> <Property Name="Name" Type="nvarchar" Nullab le="false" MaxLength="50" /> <Property Name="Budget" Type="money" Nullabl e="false" /> <Property Name="StartDate" Type="datetime" N ullable="false" /> <Property Name="Administrator" Type="int" /> </EntityType> <Association Name="FK_Course_Department"> <End Role="Department" Type="SchoolModel.Sto re.Department" Multiplicity="1" /> <End Role="Course" Type="SchoolModel.Store.C ourse" Multiplicity="*" /> <ReferentialConstraint> <Principal Role="Department"> <PropertyRef Name="DepartmentID" /> </Principal> <Dependent Role="Course"> <PropertyRef Name="DepartmentID" /> </Dependent> </ReferentialConstraint> </Association> </Schema>

Page 28: Entity Net Framework

Página 28

Universidad de El Salvador.

Especificación de asignaciones

Una especificación de asignaciones usa el lenguaje de especificación de asignaciones (MSL) para

asignar el modelo conceptual al modelo de almacenamiento.

El siguiente fragmento de MSL muestra una asignación unívoca 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/2 008/09/mapping/cs"> <EntityContainerMapping StorageEntityContainer="SchoolMode lStoreContainer" CdmEntityContainer="SchoolEntities "> <EntitySetMapping Name="Courses"> <EntityTypeMapping TypeName="SchoolModel.Cours e"> <MappingFragment StoreEntitySet="Course"> <ScalarProperty Name="CourseID" ColumnName=" CourseID" /> <ScalarProperty Name="Title" ColumnName="Tit le" /> <ScalarProperty Name="Credits" ColumnName="C redits" /> <ScalarProperty Name="DepartmentID" ColumnNa me="DepartmentID" /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> <EntitySetMapping Name="Departments"> <EntityTypeMapping TypeName="SchoolModel.Depar tment"> <MappingFragment StoreEntitySet="Department"> <ScalarProperty Name="DepartmentID" ColumnNa me="DepartmentID" /> <ScalarProperty Name="Name" ColumnName="Name " /> <ScalarProperty Name="Budget" ColumnName="Bu dget" /> <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 denominación vistas de cliente. Estas vistas controlan el procesamiento de consultas y

actualizaciones en el motor en tiempo de ejecución. El compilador de asignaciones que genera las

Page 29: Entity Net Framework

Página 29

Universidad de El Salvador.

vistas se puede invocar en tiempo de diseño o en tiempo de ejecución cuando la primera consulta

se ejecuta contra un modelo conceptual.

Entity Framework se basa en proveedores de datos ADO.NET específicos 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 canónico, que

es una representación del modelo de objetos de la consulta. Los árboles de comandos canónicos

representan comandos SELECT, UPDATE, INSERT y DELETE. La totalidad del procesamiento

subsiguiente se realiza en el árbol de comandos, que es el medio de comunicación 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 creación, actualización y eliminación de objetos entidad. Entity Framework

admite consultas de objeto contra un modelo conceptual. Las consultas se pueden crear utilizando

métodos 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 están 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 colección de entidad de objetos Course basada en la asociación

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 automáticamente, y se debe

llamar al método Load de la referencia de entidad para cargar los datos de los objetos

relacionados en el contexto de los objetos.

También puede especificar la ruta de una consulta que defina qué objetos relacionados se han de

cargar con los objetos devueltos. Para obtener más información, 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 definición de la ruta de una consulta garantiza que también se

devuelvan los objetos Course relacionados con los objetos Department. Una cláusula 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.

Page 30: Entity Net Framework

Página 30

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 representación 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. También puede serializar objetos

y enlazarlos a controles. Para obtener más información, vea Trabajar con objetos (Entity

Framework).

En el ejemplo siguiente obtenemos una colección de objetos Course relacionados con un objeto

Department y se enlaza la colección 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 ob jects // that are related to the selected Department obje ct. 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.

Page 31: Entity Net Framework

Página 31

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 podrán 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 cómo trabajan. A continuación se

muestra el modelo School mostrado en el ADO.NET Entity Data Model Designer:

Page 32: Entity Net Framework

Página 32

Universidad de El Salvador.

Para el ejemplo hemos utilizado 2 formularios, uno al que llamaremos “Visor del Curso” e

“Información”. A continuación se describen cada uno de ellos de forma individual, junto con su

codificación respectiva. Puede consultar también el demo adjunto a este documento, que

contiene este ejemplo descrito a continuación, para su respectiva prueba.

Formulario 1.

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

Page 33: Entity Net Framework

Página 33

Universidad de El Salvador.

Código del formulario 1.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data; using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms; using System.Data.Objects;

using 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);

Page 34: Entity Net Framework

Página 34

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

}

Page 35: Entity Net Framework

Página 35

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

}

}

}

}

Page 36: Entity Net Framework

Página 36

Universidad de El Salvador.

Formulario 2.

Figura 2. Vista de nuestro Formulario “Información”

Código del formulario 2.

using System; using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms; using System.Data.Objects;

using System.Data.Objects.DataClasses;

Page 37: Entity Net Framework

Página 37

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;

Page 38: Entity Net Framework

Página 38

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;

} }

}

Page 39: Entity Net Framework

Página 39

Universidad de El Salvador.

Nuestro modelo Entity luciría así:

Page 40: Entity Net Framework

Página 40

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,

Page 41: Entity Net Framework

Página 41

Universidad de El Salvador.

CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTER ED ( [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]

Page 42: Entity Net Framework

Página 42

Universidad de El Salvador.

END GO -- Create the CourseInstructor table. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CourseInstru ctor]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[CourseInstructor]( [CourseID] [int] NOT NULL, [PersonID] [int] NOT NULL, CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUST ERED ( [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 CLUSTERE D ( [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].[OfficeAssign ment]') 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 CLUST ERED ( [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

Page 43: Entity Net Framework

Página 43

Universidad de El Salvador.

WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnsiteCourse_Course]') AND parent_object_id = OBJECT_ID(N'[dbo].[On siteCourse]')) 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].[On lineCourse]')) 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].[St udentGrade]')) 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].[St udentGrade]')) 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].[Course Instructor]')) ALTER TABLE [dbo].[CourseInstructor] WITH CHECK AD D

Page 44: Entity Net Framework

Página 44

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].[Course Instructor]')) ALTER TABLE [dbo].[CourseInstructor] WITH CHECK AD D 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 Depar tment. IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Cour se_Department]') AND parent_object_id = OBJECT_ID(N'[dbo].[Co urse]')) 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_Cou rse_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].[Office Assignment]')) ALTER TABLE [dbo].[OfficeAssignment] WITH CHECK AD D 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

Page 45: Entity Net Framework

Página 45

Universidad de El Salvador.

INSERT INTO dbo.OfficeAssignment (InstructorID, L ocation) VALUES (@InstructorID, @Location); IF @@ROWCOUNT > 0 BEGIN SELECT [Timestamp] FROM OfficeAssignment WHERE InstructorID=@InstructorID; END ' END GO --Create the UpdateOfficeAssignment stored procedur e. 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 procedu re. 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'

Page 46: Entity Net Framework

Página 46

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

Page 47: Entity Net Framework

Página 47

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, S tudentID 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, FirstNa me, HireDate, EnrollmentDate) VALUES (1, 'Abercrombie', 'Kim', '1995-03-11', null ); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (2, 'Barzdukas', 'Gytis', null, '2005-09-01' ); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (3, 'Justice', 'Peggy', null, '2001-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (4, 'Fakhouri', 'Fadi', '2002-08-06', null); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (5, 'Harui', 'Roger', '1998-07-01', null); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (6, 'Li', 'Yan', null, '2002-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate)

Page 48: Entity Net Framework

Página 48

Universidad de El Salvador.

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

Page 49: Entity Net Framework

Página 49

Universidad de El Salvador.

VALUES (26, 'Rogers', 'Cody', null, '2002-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (27, 'Serrano', 'Stacy', '1999-06-01', null) ; INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (28, 'White', 'Anthony', null, '2001-09-01') ; INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (29, 'Griffin', 'Rachel', null, '2004-09-01' ); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (30, 'Shan', 'Alicia', null, '2003-09-01'); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (31, 'Stewart', 'Jasmine', '1997-10-12', nul l); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (32, 'Xu', 'Kristen', '2001-7-23', null); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (33, 'Gao', 'Erica', null, '2003-01-30'); INSERT INTO dbo.Person (PersonID, LastName, FirstNa me, HireDate, EnrollmentDate) VALUES (34, 'Van Houten', 'Roger', '2000-12-07', nu ll); GO SET IDENTITY_INSERT dbo.Person OFF GO -- Insert data into the Department table. INSERT INTO dbo.Department (DepartmentID, [Name], B udget, StartDate, Administrator) VALUES (1, 'Engineering', 350000.00, '2007-09-01', 2); INSERT INTO dbo.Department (DepartmentID, [Name], B udget, StartDate, Administrator) VALUES (2, 'English', 120000.00, '2007-09-01', 6); INSERT INTO dbo.Department (DepartmentID, [Name], B udget, StartDate, Administrator) VALUES (4, 'Economics', 200000.00, '2007-09-01', 4) ; INSERT INTO dbo.Department (DepartmentID, [Name], B udget, StartDate, Administrator) VALUES (7, 'Mathematics', 250000.00, '2007-09-01', 3); GO -- Insert data into the Course table. INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (1050, 'Chemistry', 4, 1); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (1061, 'Physics', 4, 1); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (1045, 'Calculus', 4, 7); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (2030, 'Poetry', 2, 2); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (2021, 'Composition', 3, 2); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID)

Page 50: Entity Net Framework

Página 50

Universidad de El Salvador.

VALUES (2042, 'Literature', 4, 2); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (4022, 'Microeconomics', 3, 4); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (4041, 'Macroeconomics', 3, 4); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (4061, 'Quantitative', 2, 4); INSERT INTO dbo.Course (CourseID, Title, Credits, D epartmentID) VALUES (3141, 'Trigonometry', 4, 7); GO -- 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/Composi tion'); INSERT INTO dbo.OnlineCourse (CourseID, URL) VALUES (4041, 'http://www.fineartschool.net/Macroec onomics'); INSERT INTO dbo.OnlineCourse (CourseID, URL) VALUES (3141, 'http://www.fineartschool.net/Trigono metry'); --Insert data into OnsiteCourse table. INSERT INTO dbo.OnsiteCourse (CourseID, Location, D ays, [Time]) VALUES (1050, '123 Smith', 'MTWH', '11:30'); INSERT INTO dbo.OnsiteCourse (CourseID, Location, D ays, [Time]) VALUES (1061, '234 Smith', 'TWHF', '13:15'); INSERT INTO dbo.OnsiteCourse (CourseID, Location, D ays, [Time]) VALUES (1045, '121 Smith','MWHF', '15:30'); INSERT INTO dbo.OnsiteCourse (CourseID, Location, D ays, [Time]) VALUES (4061, '22 Williams', 'TH', '11:15'); INSERT INTO dbo.OnsiteCourse (CourseID, Location, D ays, [Time]) VALUES (2042, '225 Adams', 'MTWH', '11:00'); INSERT INTO dbo.OnsiteCourse (CourseID, Location, D ays, [Time]) VALUES (4022, '23 Williams', 'MWF', '9:00'); -- 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.

Page 51: Entity Net Framework

Página 51

Universidad de El Salvador.

INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (1, '17 Smith'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (4, '29 Adams'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (5, '37 Williams'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (18, '143 Smith'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (25, '57 Adams'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (27, '271 Williams'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (31, '131 Smith'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (32, '203 Williams'); INSERT INTO dbo.OfficeAssignment(InstructorID, Loca tion) VALUES (34, '213 Smith'); -- Insert data into the StudentGrade table. INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 2, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2030, 2, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 3, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2030, 3, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 6, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2042, 6, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 7, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2042, 7, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 8, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2042, 8, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 9, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 10, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 11, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 12, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 12, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 14, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 13, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 13, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)

Page 52: Entity Net Framework

Página 52

Universidad de El Salvador.

VALUES (4041, 14, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 15, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 16, 2); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 17, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 19, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 20, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 21, 2); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 22, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 22, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 22, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 23, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1045, 23, 1.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 24, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 25, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1050, 26, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 26, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 27, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1045, 28, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1050, 28, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 29, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1050, 30, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 30, 4); GO

Page 53: Entity Net Framework

Página 53

Universidad de El Salvador.

Bibliografía.

� www.msdn.microsoft.com

� Entity Framework Learning Guide (Zeeshan Hirani)

� ADO.NET Entity Framework 4.0 (Unai - Zorrilla - Castro)