Introducción

Una vez conocidos los conceptos principales de Entity Framework Core en la primera parte de esta serie, podemos ponernos manos a la obra y empezar a crear nuestra aplicación en la que usaremos este ORM.

Por simplicidad, utilizaremos una aplicación de consola y daré por hecho que .NET Core está instalado en vuestros equipos, así como Visual Studio Community.

Creando el proyecto

Para crear una aplicación de consola, podemos acudir a una terminal y ejecutar el siguiente comando, que creará una aplicación de consola con el nombre indicado en un directorio dedicado:

Ejecutado este comando, podemos abrir nuestro proyecto de consola con Visual Studio. O bien, si preferimos utilizar esta herramienta desde el inicio, podemos crear la aplicación desde el mismo IDE.

Instalando Entity Framework Core

Ahora mismo nuestra aplicación no hace nada. Podemos añadir código de saludo y que quede de la siguiente forma:

Hello World

Es el momento de añadir las dependencias que nos permitirán operar con nuestras bases de datos a través de Entity Framework Core. ¿Cómo? Con paquetes NuGet.

Conociendo NuGet Packages

Antes de instalar cualquier package en nuestra aplicación, considero necesario empezar a hablar de NuGet. Los NuGet packages son bibliotecas que podemos instalar en nuestras aplicaciones, ya sean creadas por Microsoft o por la comunidad, para añadir funcionalidades a nuestros proyectos.

Podemos gestionarlas (ya sea para añadir, actualizar, eliminar…) a través de la interfaz gráfica que nos ofrece Visual Studio, o bien utilizar una terminal. Yo utilizaré esta última opción.

Necesitaremos varios packages para utilizar Entity Framework Core:

  • Package de EntityFrameworkCore.
  • Package de herramientas para EF Core, EntityFrameworkCore.Tools.
  • Y package de EntityFrameworkCore dedicado al proveedor de bases de datos que vayamos a utilizar, en este caso EntityFrameworkCore.SqlServer.

¡Porque sí! EF Core trabaja con múltiples proveedores de bases de datos que puedes consultar en la documentación de Microsoft. Elige el que más te guste o se ajuste a las necesidades de tu proyecto.

Para los primeros NuGets que hemos mencionado ejecutaremos los siguientes comandos. Para instalar Entity Framework Core:

Y para el tooling de EF Core:

En este proyecto, vamos a utilizar SqlServer, por lo que utilizaremos el NuGet específico para esta tecnología. Para instalarlo, a través de la terminal, ejecutamos el siguiente comando:

Y ya queda menos para empezar a definir nuestras entidades y empezar a trabajar con ellas, pero antes necesitamos abordar un nuevo concepto: el contexto.

DbContext

El contexto o DbContext es un concepto vital en Entity Framework Core. Es una clase, que podemos instanciar. Cada instancia representa una sesión con la base de datos. Es nuestro intermediario con ella, nuestra “base de operaciones”.

Desde esta instancia podemos realizar múltiples acciones, como por ejemplo:

  • Modelar nuestras entidades.
  • Establecer relaciones entre ellas.
  • Consultar datos.
  • Guardar nuevos datos.
  • Eliminar datos existentes.
  • Gestionar transacciones.

Y otras tantas acciones. Así que, será nuestro próximo objetivo. Crea un nuevo fichero, una clase, llamada MyContext, que tendrá como herencia la clase DbContext. Esta clase le dotará de toda la funcionalidad que necesita.

Como ya hemos comentado, este contexto será nuestro intermediario con la base de datos, además de gestionar nuestras entidades y demás, por lo que podemos especificar dónde se encuentra y cómo se llama nuestra base de datos con PuntoTechApp:

dbContext

La primera entidad

Nuestra aplicación va a gestionar, en principio, un listado de los artículos de PuntoTech. Será una tabla que, de momento, contendrá títulos, enlaces y número de palabras de cada artículo.

Necesita de otros campos, como la clave primaria (o primary key), así como los de auditoría: autoría de inserción, fecha de inserción… aunque de momento, por simplicidad, vamos a añadir solo el campo que representa la clave primaria.

Para reutilizar código y hacerlo más mantenible de cara al futuro, crearemos una clase que contenga los campos de clave y auditoría. La llamaremos BaseEntity, y en código la expresaremos así:

Clase BaseEntity

Ahora podemos crear nuestra entidad para artículos, o Post como nombraremos a la clase. Tendrá herencia de la clase BaseEntity, por lo que estaría completa (de momento), de la siguiente forma:

Clase Post

Ahora, volviendo a nuestro contexto, añadiremos más código.

En este código, vamos a añadir una nueva propiedad para gestionar la lista de Posts. Literalmente, esta colección, de tipo DbSet, representa la tabla Post que vamos a crear en nuestra base de datos, junto con todas sus filas:

Colección DbSet de Posts

Aplicando los cambios

Hemos diseñado nuestra tabla y preparado nuestro contexto para operar con ella ¿Qué es lo que nos falta?

¡Hagamos de estos planes una realidad en nuestra aplicación!

En la terminal, podemos ejecutar el siguiente comando para generar una primera migración de nombre “InitialCreate”. El nombre es libre, aunque deberíamos intentar que sea lo más descriptivo posible, por el bien de nuestra cordura en el futuro.

Esta será nuestra primera migración. Tal y como comentábamos en la primera parte de esta serie, las migraciones dejan constancia de los cambios que se van a introducir y los pasos a seguir para revertir esos mismos cambios.

Por eso, en nuestro proyecto, aparecerá un directorio de migraciones. Allí, ordenadas cronológicamente, aparecerán las migraciones que hagamos con el paso del tiempo.

Si abrimos el fichero, veremos la parte de cambios a introducir, en el método Up, y los pasos para revertir la migración, en el método Down.

Es el momento de revisar que todos los cambios son correctos, y que son exactamente los que queremos añadir. Porque aún estamos a tiempo, los cambios no se han ejecutado todavía en la base de datos.

Cuando ha sido revisado y el resultado es satisfactorio, es el momento de aplicar la migración. Así aplicamos los cambios, a través de nuestra terminal:

Y si revisamos la base de datos, veremos cómo los cambios se han producido en nuestra base de datos. En nuestro caso, se ha creado la tabla Post con los campos que hemos ideado para la misma.

¡Y esto es solo el principio!

Conclusiones

En futuras partes de esta serie, empezaremos a operar con la base de datos a nuevos niveles: introduciremos cambios en nuestra tabla Post, listaremos nuestros datos, crearemos una nueva tabla, añadiremos relaciones entre ellas…

Gracias por tu tiempo de lectura, espero que sea una lectura entretenida e instructiva. Si quieres seguir aprendiendo, no te pierdas el contenido que generamos en PuntoTech. Cada vez somos más y buscamos más contenido interesante para publicar.

¡Saludos!

--

--

Elena G
DotTech

.NET developer | Microsoft MVP | speaker | worldbuilding, storytelling 📝🌃 | gamedev, futurism 💻📱🎮 | she/they | ⚾ https://twitter.com/Beelzenef_