Otro de los enfoques que nos ofrece Entity Framework es Code First, este es un enfoque en el cual se deja a un lado el diseñador de modelo y con ello toda su facilidad visual de la que hablamos en nuestra serie de artículos anteriores Enfoque Data Base First, sin embargo nos ofrece como los otros enfoques grandes ventajas si lo usamos en el escenario adecuado y un buen punto de referencia para saber si se trata del escenario adecuado es ¿Qué enfoque elegir?

En Code First primero codificamos y luego generamos nuestra base de datos en base al código que hemos creado, un poco en contra de lo que estamos acostumbrados no? ya que por lo general modelamos en primera instancia y luego implementamos, sin embargo, puede darse el caso en algún proyecto que ya tengamos todas las entidades de dominio creadas por cualquier motivo, pues en este caso nos viene perfecto el uso de Code First, ya que vamos a reutilizar las entidades de dominio que ya tenemos y podemos usarlas para crear nuestra base de datos, ahí encontramos una ventaja por ejemplo, y digamos que hablando un poco más orientado a los gustos de los desarrolladores, para las personas que no son amantes del código auto generado, de un diseñador y que prefieren codificar ellos mismos la totalidad de su código, es la mejor elección.

Bueno y ahora nos surge otra duda, ¿Cómo hace Entity Framework Code First para crear la base datos y mapearla con mis entidades de dominio?

Como ya vimos en artículos anteriores en EF se trabaja con un Contexto (Context), el cuál agrupa todos los objetos de nuestro modelo conceptual, bueno para code first es igual y es el primer objeto que debemos crear para generar nuestra base de datos, entonces en el constructor de nuestro contexto podemos pasar como parámetro el nombre que queremos darle a la DB una vez se cree, o también podemos pasar como parámetro la cadena de conexión para nuestra DB, o simplemente no enviamos parámetros en el constructor y siendo así code first auto generará el nombre usando el name space en cual se encuentra el contexto y el nombre de la clase del mismo, algo como eso:

NameSpace.ContextClassName

Y para crear tablas con sus respectivas primary y foreign key y demás objetos usa algunas convenciones, las cuales podemos encontrar en el siguiente enlace:

Code First Conventions

Adicional quiero compartirles esta imagen que resume el proceso de creación de la base de datos:

Y para terminar quiero compartirles un par de conceptos fundamentales a la hora de trabajar con Code first y que vamos a ver muy a menudo en nuestra serie de artículos de Code First:

DbContext: Será el objeto que agrupará todos los elementos de nuestro modelo conceptual y manejará el mapeo de cada uno ellos con su par en la base de datos, incorpora el patrón unidad de trabajo y el patrón repositorio, aquí les dejo la referencia de msdn: DbContext

DbSet: Comúnmente usado como tipo de propiedades al interior de una clase que hereda del tipo DbContext, este recibe un tipo genérico el cual representa una entidad de nuestro dominio, de esta forma habilita las operaciones CRUD para la entidad especificada. Aquí les dejo la referencia de msdn: DbSet

DataAnotations: Serie de atributos con los cuales se pueden decorar las entidades del dominio y sus propiedades, permiten especificar características como longitud, exclusiones e mapeo, primary y foreign key, etc. Aquí les dejo la referencia de msdn: Code First Data Annotations

DataBase Migrations: Permite actualizar nuestra base de datos cuando existan cambios en nuestras entidades de dominio. Aquí les dejo la referencia de msdn: DataBase Migrations

Bueno y eso es todo, espero esta introducción a Entity Framework Code First sea de gran utilidad para ustedes y despeje muchas dudas, en artículos posteriores veremos más en detalle la forma de trabajo e implementación.

Este artículo también lo puedes encontrar en mi blog personal: ElTavo.Net

Saludos y buena suerte!