Code First Migration

Embed Size (px)

DESCRIPTION

Microsoft Entity Framework abstrae el esquema de base de datos lógica relacional y presenta un esquema conceptual para la aplicación .NET. Proporciona mapeo objeto-relacional para desarrolladores .NET. Code First permite a los desarrolladores crear clases de la mano con la programación, ya que en el modelo DataBase First el programador se adecua al modelo de la base de datos ya creada o existente, mientras que en Code First el programador crea las entidades y las relaciones según a como se adecue su programación y como lo necesite, Code First Migrations permite a los desarrolladores evolucionar el modelo basado en el código para que los cambios se reflejen con precisión en el almacén de base de datos..

Text of Code First Migration

INTRODUCCIN

Microsoft Entity Framework abstrae el esquema de base de datos lgica relacional y presenta un esquema conceptual para la aplicacin .NET. Proporciona mapeo objeto-relacional para desarrolladores .NET. Code First permite a los desarrolladores crear clases de la mano con la programacin, ya que en el modelo DataBase First el programador se adecua al modelo de la base de datos ya creada o existente, mientras que en Code First el programador crea las entidades y las relaciones segn a como se adecue su programacin y como lo necesite, Code First Migrations permite a los desarrolladores evolucionar el modelo basado en el cdigo para que los cambios se reflejen con precisin en el almacn de base de datos..

1. CODE FIRSTCode First es un enfoque ms de Entity Framework (hay otros dos enfoques que son Database First y Model First) que plantea lo siguiente:T crea clases POCO (Plain Old Class Object) con tu lenguaje favorito (C#, VB.NET, etc.) y crea relaciones entre las mismas.Lo importante es entender que con Code First,lo primero es el cdigo. En vez de comenzar creando la base de datos y despus con ingeniera inversa generar las clases POCO (como hacamos con Database First), con Code First primero creamos el modelo con cdigo y despus se genera automticamente la base de datos.Para poder comenzar a utilizar este nuevo enfoque, ser necesario que descarguemos, al menos la versin 4.1, de Entity Framework o la instalemos desde el Administrador de Paquetes NuGet.Una vez instalado, ser necesario que empecemos con la definicin de nuestras entidades, que podremos definir como Objetos POCO. Ejemplo de clase POCO:

Despus de la creacin de nuestros objetos, ser necesario que definamos nuestra clase de contexto, para que podamos interactuar con la Base de Datos, donde adems de definir un constructor genrico y las sobrecargas que necesitemos, definiremos las colecciones de las entidades que necesitemos:

Despus de estos pasos, ya podremos empezar a utilizar Entity Framework, sin haber creado la base de Datos (subrayado):

La invocacin al mtodo SaveChanges va a ser la encargada de definir la Base de Datos si no existe y registrar el nuevo cliente en la tabla Clientes de la Base de datos.2. CODE FIRST MIGRATIONSPara poder usarMigrationscon el proyecto de nuestro modelo de negocio, es necesario habilitarMigrationspara el proyecto.Comenzaremos abriendo la ventana del Package Manager Console y ejecutamos el comando Enable-Migrations. Es muy importante seleccionar el proyecto sobre el que queremos habilitarMigrations:

Esto nos creara en nuestro proyecto una carpeta Migrations con una clase Configuration en la que podremos definir algunas de las caractersticas de comportamiento deMigrationscomo la activacin de las actualizaciones automticas, o, podremos incluir cdigo especializado para el mapeo de nuestro modelo sobre la base de datos usandoFluent API:

3. Crear una migracinUna vez habilitado Migrations y una vez definido nuestro modelo (al menos en su mayor parte), podemos proceder a preparar una migracin. Para preparar una migracin disponemos del comando: Add-MigrationLo ms probable cuando usamos Code First es que partamos de una base de datos vaca, en cuyo caso Add-Migration generar el cdigo necesario para crear nuestras tablas completas con sus relaciones, claves, Foreing Keys, etc y crear tambin el snapshot que se almacenar en la tabla (MigrationHistory) que mantiene la historia de las migraciones.Cada vez que se ejecuta el comando Add-Migration se compara el modelo con el ltimo snapshot para determinar los cambios a realizar.El comando Add-Migration necesita que le especifiquemos unnombre de migracin, EF generar un fichero con el cdigo necesario para realizar los cambios en la base de datos. El nombre de este fichero ser el nombre que le hayamos proporcionado como parmetro en el comando Add-Migration con un prefijo que la agrega EF basado en un timestamp, de forma que cada migracin tenga un nombre nico que la pueda identificar. Este comando necesita que le indiquemos la cadena de conexin que se utilizar para la conexin de la migracin: StartupProjectName= AccesoDatos

Cada vez que ejecutamos el comandoAdd-MigrationEF nos agrega un nuevo archivo basado en las diferencias encontradas con el snapshot anterior.4. Aplicar una migracinUna vez creada la migracin ha llegado el momento de actualizar la base de datos con estos cambios. Para esto disponemos del comando: Update-DatabaseEste comando se encarga de aplicar los cambios generados a nuestra base de datos. De nuevo nos encontramos con 2 escenarios posibles: el primero cuando la base de datos est vaca y el segundo cuando la base de datos ya ha sido inicializada previamente.Si la base de datos est vaca, el comandoUpdate-Databasecrear la tabla (_MigrationHistory) adems de aplicar los cambios en la base de datos. Tambin guardar el snapshot generado por el comandoAdd-Migrationen la tabla_MigrationHistory.

Y nuestra base de datos ser actualizada segn los cambios especificados en el archivo de migracin.Cada vez que ejecutamos un comando "Add-Migration EF crea un nuevo archivo de migracin con las diferencias encontradas con el estado anterior de la base de datos. El comandoUpdate-Databasetambin nos permite retroceder a un estado anterior de una migracin especfica. Lo podemos hacer mediante el parmetro -TargetMigrationespecificando el nombre de una migracin existente (mucho mejor si es el nombre completo incluyendo el timestamp):-TargetMigration: MigracionDesarrollo o-TargetMigration: 201506052109355_MigracionDesarrollo

5. ConclusinComo podemos observar Code First Migrations te permite modificar la base de datos como tambin el ir y venir de una migracin si sucede algn error, ya que no se poda realizar el cambios en la base de datos que se programaba, como el insertar, modificar, eliminar, etc.