Está en la página 1de 36

ADO.NET Entity Framework https://msdn.microsoft.com/es-ar/library/bb399567(v=vs.110).

aspx
ADO.NET Entity Framework está diseñado para permitir a los programadores crear aplicaciones de acceso
a datos programando con un modelo de la aplicación conceptual en lugar de programar directamente con un
esquema de almacenamiento relacional.

• Las aplicaciones pueden funcionar en términos de un modelo conceptual más centrado en la aplicación, que
incluye tipos con herencia, miembros complejos y relaciones.

• Las aplicaciones están libres de dependencias de codificación rígida de un motor de datos o de un esquema de
almacenamiento.

• Las asignaciones entre el modelo conceptual y el esquema específico de almacenamiento pueden cambiar sin
Ventajas tener que cambiar el código de la aplicación.

• Los programadores pueden trabajar con un modelo de objeto de aplicación coherente que se puede asignar a
diversos esquemas de almacenamiento, posiblemente implementados en sistemas de administración de base de
datos diferentes.

• Se pueden asignar varios modelos conceptuales a un único esquema de almacenamiento.

• La compatibilidad con Language-Integrated Query proporciona validación de la sintaxis en el momento de la


compilación para consultas en un modelo conceptual.
Entity DataModel
Entity Data Model (EDM) es un conjunto de conceptos que describen la estructura de los datos,
independientemente del formato en el que estén almacenados.

Es una representación específica de la estructura de los datos en forma de entidades y relaciones, y normalmente se
Modelo define mediante un lenguaje específico de dominio (DSL) que implementa los conceptos de EDM.
Conceptual
Las entidades y relaciones descritas en un modelo conceptual se pueden considerar como abstracciones de objetos y
asociaciones en una aplicación.

Esto permite a los desarrolladores centrarse en el modelo conceptual sin tener que
preocuparse por el esquema de almacenamiento, así como escribir el código teniendo en
cuenta la eficacia y el mantenimiento.

Mientras tanto, los diseñadores del esquema de almacenamiento pueden centrarse en la


eficacia en el acceso a los datos, el almacenamiento y la escalabilidad.
EntityFrameWork como herramienta ORM

ORM – Object Relational Mapper

Tablas Colecciones

Registros Clases

Campos Propiedades
Enfoques
Database First Code First

es el método que nos permite considera la alternativa más


primero crear la base de datos con adecuada para aquellos casos en los
sus tablas (y otras estructuras) y que hay que crear la base de datos
luego incorporarlas a la aplicación. desde cero en conjunto con la
Esto es necesario cuando la aplicación, y es el equipo de
aplicación que realizamos necesita desarrollo quien debe hacerlo.
utilizar una base de datos existente. Usando Code First literalmente no
deberemos escribir una sola
sentencia SQL. El enfoque es muy
similar a lo que nos propone Model
First, pero en vez de trabajar con
Model First una herramienta de diseño lo
haremos directamente desde el
se caracteriza por primero definir las código
clases en la aplicación y a partir de
ello crear la base de datos asociada.
Crear un
Modelo EDM
Partiendo de una Base de Datos Existente

Partiendo de un modelo vacio


Enfoque Database First

Con este enfoque el Modelo


actualiza los cambios desde la
Base Datos.

Primero actualizamos la base de


datos y luego actualizamos el
modelo
Enfoque Model First
En este enfoque creamos los cambios en el
Entity Data Model. Creando Nuevas
Entidades…

Propiedades,

y asociaciones
Model First

Database

Los cambios en el modelo son generados en un


Script para actualiza la base de datos.
Enfoque Code First Creando Modelo Conceptual

Al usar el desarrollo de Code First, suele empezarse por escribir


las clases que definen el modelo conceptual (dominio)
Estas clases son objetos simples y llanos del CLR (conocidos
como POCO por sus siglas en inglés). No es necesario
derivarlas de ninguna clase base en especial o que implementen
ninguna interfase específica. Además, las propiedades expuestas
son tipos estándar de .NET; no se necesita decorarlos con
atributos de permanencia
Enfoque Code First
Creando Asociaciones
Enfoque Code First Modelo Conceptual
Enfoque Code First Creando una contexto de datos para el
almacenamiento de datos

Además de definir las clases, también debe dejar que DbContext conozca los tipos que desea incluir en el modelo.
Para ello, se define una clase de contexto que se deriva de DbContext y expone las propiedades de DbSet para los
tipos que desea que formen parte del modelo. Code First incluirá estos tipos y también extraerá algunos tipos a los
que se hace referencia, incluso si estos se definen en otro ensamblado.

Los tipos DbContext y DbSet residen en la biblioteca de Code First de EF. Necesitan agregar una referencia a
System.Data.Entity
Enfoque Code First Convenciones

En EF, el enfoque CF viene configurado para usar convenciones en vez de configuración, lo que permite usar
prácticas comunes en estructurado de datos en lugar de tener que configurarlo de manera explícita. Las
convenciones pueden ser redefinidas si es necesario crear reglas diferentes.

Las convenciones son conjuntos de reglas que se usan para configurar automáticamente un modelo conceptual
basándose en definiciones de clase cuando se trabaja con Code First. Las convenciones se definen en el espacio de
nombres System.Data.Entity.ModelConfiguration.Conventions

Convención de clave principal


Code First deduce que una propiedad es una clave principal si la propiedad de una clase se denomina “ID” (no
distingue entre mayúsculas y minúsculas) o el nombre de clase seguido de “ID. Si el tipo de la propiedad de clave
principal es numérico o GUID, se configurará como una columna de identidad .
Enfoque Code First Convenciones
Convención de las relaciones
En EF, las propiedades de navegación proporcionan una manera de navegar en una relación entre dos tipos de entidad. Cada objeto
puede tener una propiedad de navegación para cada relación en la que participa. Las propiedades de navegación permiten navegar y
administrar las relaciones en ambas direcciones, devolviendo un objeto de referencia (si la multiplicidad es de uno, o cero o uno) o
bien una colección (si la multiplicidad es de varios).
Code First deduce las relaciones según las propiedades de navegación definidas en sus tipos.
Además de las propiedades de navegación, se recomienda que incluya propiedades de clave externa en los tipos que representan
objetos dependientes.
Una propiedad con el mismo tipo de datos que la propiedad de clave principal de tipo principal y con un nombre que siga uno de los
siguientes formatos representa una clave externa para la relación:
‘<nombre de propiedad de navegación><nombre de propiedad de clave principal de tipo principal>’,
‘<nombre de clase de tipo principal><nombre de propiedad de clave principal>'
o ‘<nombre de propiedad de clave principal de tipo principal>’
Si se encuentran varias coincidencias, la prioridad se asigna en el orden mostrado anteriormente.
La detección de clave externa no distingue entre mayúsculas y minúsculas. Cuando se detecta una propiedad de clave externa, Code
First deduce la multiplicidad de la relación según la nulabillidad de la clave externa. Si la propiedad admite valores NULL, la relación
se registra de forma opcional; si no, la relación se registra cuando sea necesario.
Si una clave externa en la entidad dependiente no admite valores NULL, Code First establece la eliminación en cascada en la relación.
Si una clave externa en la entidad dependiente admite valores NULL, Code First no establece la eliminación en cascada en la relación
y, cuando se elimina la entidad de seguridad, la clave externa se establece en NULL. La multiplicidad y el comportamiento de la
eliminación en cascada detectados por convención se pueden invalidar con la API fluida.
Enfoque Code First Convenciones

Convención de las relaciones


Enfoque Code First Convenciones
Usar Code First con conexión por convención

Si no se ha hecho ninguna otra configuración en la aplicación, después de llamar al constructor


sin parámetros en DbContext,
DbContext se ejecutará en el modo de Code First con una conexión de base de datos creada por convención.

En este ejemplo, DbContext usa el


nombre completo del espacio de
nombres de la clase de contexto
derivado,
VehiculoDAL.AutosContexto, como
nombre de la base de datos y crea una
cadena de conexión para esta base de
datos usando SQL Express o LocalDb.
Si ambos están instalados, se usará
SQL Express.
Enfoque Code First Convenciones
Usar Code First con conexión por convención y el nombre de la base de datos especificado

Si no ha hecho ninguna otra configuración en la aplicación, después de llamar al constructor de cadena en DbContext
con el nombre de la base de datos que desea usar, DbContext se ejecutará en el modo de Code First con una conexión
de base de datos creada por convención a la base de datos con dicho nombre. Por ejemplo:

En este ejemplo, DbContext usa


“CursoDb” como nombre de la base
de datos y crea una cadena de
conexión para esta base de datos
mediante SQL Express (instalado con
Visual Studio 2010) o LocalDb
(instalado con Visual Studio 2012). Si
ambos están instalados, se usará SQL
Express..
Enfoque Code First Convenciones
Usar Code First con la cadena de conexión en el archivo app.config/web.config

Puede elegir colocar una cadena de conexión en el archivo app.config o web.config. Por ejemplo:

Si el nombre de la cadena de conexión coincide con el


nombre de su contexto (ya sea con o sin la clasificación del
espacio de nombres), DbContext lo encontrará cuando se
use el constructor sin parámetros.

Si el nombre de la cadena de conexión es diferente del nombre del contexto, puede indicar a DbContext que
utilice esta conexión en el modo Code First pasando el nombre de la cadena de conexión al constructor de
DbContext.
Enfoque Code First Convenciones
Usar Code First con la cadena de conexión en el archivo app.config/web.config

Se puede usar el formato “nombre=<nombre de cadena de conexión>”para la cadena que se


pasa al constructor de DbContext. Por ejemplo:
Enfoque Code First Data Annotations
Code First le ofrece dos maneras de agregar configuraciones a las clases del Modelo Conceptual.
Una es usar atributos simples denominados DataAnnotations y la otra es emplear la API fluida de Code First,
que le proporciona una manera de describir las configuraciones obligatorias, en el código.

Key

Entity Framework se basa en cada entidad que tiene un valor


de clave que se usa para seguir las entidades.
Una de las convenciones de las que depende Code First
es el modo en que supone que la propiedad sea la clave
de cada una de clases Code First. Esa convención implica
buscar una propiedad denominada “Id” u otra que combine
el nombre de clase y el “Id” (identificador), como “AutomoviId”.
La propiedad se asignará a una columna de clave principal en la
base de datos
Si Code First no encuentra una propiedad que coincida con
esta convención, se producirá una excepción debido al requisito
de Entity Framework respecto a que debe tener una propiedad de clave.

Puede usar la anotación de [Key] para especificar qué propiedad debe usarse como EntityKey.
Enfoque Code First Data Annotations

Required v
La anotación Required indica a EF que una propiedad
determinada es necesaria.

Agregar Required a la propiedad Title hará que EF (y MVC)


se aseguren de que la propiedad tiene datos.

Sin cambios adicionales de código o de marcas en la


aplicación, una aplicación MVC realizará la validación del lado cliente,
incluso generando dinámicamente un mensaje con los nombres de propiedad
y de anotación.

El atributo Required también afectará a la base de


datos generada al hacer que la propiedad asignada
no admita valores NULL.
Enfoque Code First Data Annotations

MaxLength y MinLength

Los atributos MaxLength y MinLength permiten especificar


validaciones de propiedades adicionales, igual que Required.
Este es el nombre de Pais con requisitos de
longitud. El ejemplo también muestra cómo combinar atributos.

La anotación MaxLength afectará a la base de datos


estableciendo la longitud de la propiedad en 10
Enfoque Code First Data Annotations

NotMapped
Indica que la propiedad del modelo conceptual no se
mapea en el modelo relacional
Enfoque Code First Data Annotations

Column
Configura el nombre de la del campo
en el modelo relacional
Enfoque Code First Data Annotations

DisplayName
Especifica el nombre de visualización
de la propiedad
Enfoque Code First Data Annotations

DisplayName
Especifica el nombre de visualización
de la propiedad
Enfoque Code First Api Fluida

Code First permite usar sus propias clases de dominio para representar el modelo en el que se basa EF para realizar las
consultas, el seguimiento de los cambios y las funciones de actualización. Code First usa un modelo de programación conocido
como convención sobre la configuración. Lo que significa esto es que Code First supondrá primero que las clases siguen las
convenciones del esquema que EF usa para un modelo conceptual. En ese caso, EF podrá obtener los detalles que necesita para
realizar su trabajo. Sin embargo, si las clases no siguen dichas convenciones, tiene la capacidad de agregar configuraciones a las
clases para proporcionar a EF la información que necesita

Las configuraciones de la API fluida se aplican a medida que Code First está generando el modelo a partir de las
clases. Puede insertar la configuración invalidando el método OnModelCreating de la clase de DbContext según
se muestra aquí.

DbModelBuilder ofrece un enlace a la


configuración. Aquí podemos indicar al
generador de modelos que deseamos
influir en una de las entidades y puede
usar elementos genéricos para
especificar en qué entidad exponer
Enfoque Code First Api Fluida

ToTable(<Nombre de la Tabla>,opcional <Nombre de Esquema>)


Especifica el nombre de la tabla en el modelo relacional
Enfoque Code First Api Fluida

MapToStoreProcedures()

Configura el mapeo contra los procedimientos de inserción, borrado y


actualización
Por Converncion se buscarán los siguientes nombres de SP,
[Entidad]_Insert, [Entidad]_Update y [Entidad]_Delete
Enfoque Code First Api Fluida

Map()

Mapea las columnas de una tabla en el modelo relacional


Enfoque Code First Api Fluida

Eliminar la propiedad ON_DELETE_CASCADE

Modificando la relación de la entidad

Eliminando la convención
Enfoque Code First Clases POCO

Propiedades Virtuales

Public virtual <Propiedad> {get;set;}

Permite al EF crear un proxy virtual alrededor de la propiedad


Esa carga diferida y el seguimiento de cambios más eficiente
Consola
Enable-Migrations: Agrega una carpeta Migraciones a nuestro proyecto. Esta carpeta contiene una
clase Configuration. Esta clase permite configurar el modo en que se comportan las migraciones en el contexto

El parámetro EnableAutomaticMigrations habilita las


migraciones automáticas
Consola
Update-Database: Hace que Migraciones de Code First inserte los cambios en nuestro en la base de datos.

-script Genera un script con los cambios

-force Fuerza los cambios

También podría gustarte