¡Hola buenas madrugadas! En la publicación anterior vimos cómo inciar la configuración desde cero por medio de línea de comandos con ASPnet Core 2. En esta segunda parte vamos de con todo el power con Entity Framework Core 2 y su configuración con PostgreSQL.

¡Venga vamos!

Iniciamos creando la clase producto.cs dentro de la carpeta Models y le asignamos propiedades, y tenemos:

Con el Modelo creado, el siguiente paso es iniciar nuestro “DbContext”, con esto tendremos la capacidad de hacer llamadas a la Base de Datos mediante Entity Framework Core, por efectos de tiempo, creamos AdvientoContext.cs en la raíz del proyecto, al mismo nivel de Startup.cs, dejo en claro que esto se organiza de mejor manera, se lo dejo de tarea para que investiguen, aprendan y compartan.

En el AdvientoContext.cs está el código:


Probamos mediante un dotnet build:

image

Todo en orden, todo fresh, ¡procedemos a invocar Entity Framework Core con el power del unicornio!

image

Revisemos qué hay en el comando database

image

¿y dónde está el comando para la creación de base de datos? Respiremos hondo, pongamos una leve pausa y repitamos juntos: total, es una base de datos de ejemplo, nada puede romperse. ¡Veamos qué resulta!

Ejecutamos:

dotnet ef database update

image

image

En el post anterior, mencionamos que se debe LEER lo que dice el error y luego de LEER, INTERPRETAR. El error dice que no hay un proveedor de base de datos configurado para este “contexto”, que un proveedor puede ser configurado sobreescribiendo el método DbContext.OnConfiguring o usando AddDbContext en el “service provider” de la aplicación. Si AddDbContext es usado, entonces verificar que nuestro tipo de DbContext acepte un objeto DbContextOptions<TContext> en el contructor y lo pase a la base para el DbContext.

¿Dónde está ese “service provider”? ¿Ideas?¿Ninguna?¿Qué hacemos?¿Lloramos? Primero, vamo a calmarno. Entramos en modo Zen, respiramos hondo y buscamos esa información que aprendimos en el post anterior, Es… estar…estartap, ¡Claro! El Startup.cs ¡bingo!

Antes de ejecutar nuevamente el comando, la pregunta es “¿Qué esperamos que nos genere?” ¿Dará error? ¿Saldrá algo diferente? Hacemos una leve pausa y leemos los pantallazos del erro que nos dio anteriormente.

“No hay un proveedor de base de datos”, desde ya, algo nos dice que va a tronar si ejecutamos nuevamente. ¿Cómo se agrega un proveedor de base de datos? ¿Lo ven? Ya están elevando ese cosmos con todo el power 2.0!!! Al realizarse preguntas conforme avancen, están apaciguando esa bestia interna que sale cuando la frustración es alta y/o cuando la paciencia está casi en su límite de agotamiento.

¿Recuerdan que acordamos usar PostgreSQL? Vamos al sitio web de nuget e instalamo. Link https://www.nuget.org/packages/Npgsql

dotnet add package Npgsql --version 4.0.4

image

Vamos a agregar los siguientes paquetes de nuget:

https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL/2.2.0

Comando:

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 2.2.0

image

Y finalmente este otro paquete de nuget: https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL.Design/1.1.1

Comando:

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL.Design --version 1.1.1

image

Ahora actualizamos el startup.cs, sí, este archivo es muy importante.

A tener en cuenta que se necesita de “using Microsoft.EntityFrameworkCore;

Ejecutamos un dotnet build para ver que todo siga fresh:

image

¡Perfecto! Realizamos la operación anterior que nos lanzó error, esperando que esta vez esté libre de errores, le damos el comando

dotnet ef database update

image

*Y una voz dijo: no tan pronto, todavía te hace falta entrenar un poco más antes de subir de nivel.

Respiramos hondo, nos conectamos con nuestro ser, entramos en modo Zen, reducimos el ego que nos interrumpe, respiramos profundo nuevamente y leemos el error, lo analizamos y llegamos a la conclusión que nos quiere decir que ya valimos xD!

¿Cómo hacer para que funcione? Según lo que nos da el error, debemos declarar un constructor que acepte un DbContextOptions<AdvientoContext> y pasarlo al contructor base de DbContext. Esto se realiza así:

Finalmente, ejecutamos de nuevo el comando “dotnet ef database update”

image

image

¡Joooooooo! ¡Funcionó!

image

¡Continuamos! Es hora de generar la tabla productos. Para lograrlo necesitamos agregar las migraciones, tal y como su nombre lo dice, ir de un lado a otro, en este caso, en la base de datos, esto nos permite una rápida adaptación a lo que tengamos que crear mientras que nuestro cliente sigue solicitando cambios Open-mouthed smile Cuidado que en sistemas puestos en producción se realiza vía scripts.

image

Sí, tal y como estás pensando ahora: tenemos que utilizar el comando dotnet ef database update, ¿ves? de tantas veces que lo estás repitiendo, ya te lo aprendiste hasta de memoria.

image

image

Vamos al dbeaver para comprobar tanta belleza:

image

Completamos la parte II de esta serie de tutoriales, nos vemos en la parte III donde le agregamos nuestra WebAPI + POSTman. Me despido hasta el siguiente post, ¡que tengan felices fiestas! Gracias por su atención y su tiempo.