Configuración y migración de bases de datos con Entity Framework
Resumen
¿Cómo configurar una conexión con SQL Server?
La configuración de una conexión con SQL Server es una etapa esencial para gestionar eficientemente bases de datos. Este proceso se inicia configurando parámetros específicos dentro de un método protegido que se sobreescribe para adecuarse a nuestros requisitos. Este método es conocido como OnConfiguring.
¿Cuál es el primer paso para establecer la conexión?
El primer paso es crear un objeto que referencie nuestra configuración de opciones de contexto de base de datos. Este objeto pertenecerá a la clase DbContextOptionsBuilder. A través de este objeto, gestionaremos si una cadena de conexión ya está configurada. En caso contrario, procederemos a configurarla mediante código.
¿Cómo se define la cadena de conexión?
Para definir la cadena de conexión, se debe utilizar la biblioteca adecuada, como Microsoft.EntityFrameworkCore.SqlServer, la cual deberá instalarse si no está disponible. La cadena de conexión debe incluir:
Nombre del servidor: Identificado por ejemplo como LM, que es un ejemplo del nombre de la máquina.
Nombre de la base de datos: Que puede ser InventoryDB o cualquier nombre que se desee asignar.
Credenciales: Esto incluye el nombre de usuario, habitualmente SA, y su contraseña asociada.
¿Cómo se garantiza la correcta instalación de dependencias?
Si encuentras problemas al compilar o ejecutar el proyecto, es posible que necesites instalar algunos paquetes adicionales desde el administrador de paquetes NuGet, como lo es Microsoft.EntityFrameworkCore.Design. Esto se realiza mediante la consola del administrador de paquetes.
Manejo de migraciones para bases de datos
Una vez establecida la conexión, es crucial gestionar las migraciones. Estas permiten aplicar reflejos de cambios en el esquema de base de datos a partir del código fuente.
¿Cómo se crea una nueva migración?
Para registrar cambios en el modelo de datos, debes crear una nueva migración usando el comando Add-Migration seguido por el nombre descriptivo de la migración. Este deberá realizarse en la consola adecuada asegurando que el proyecto correcto esté seleccionado como el de inicio.
Add-Migration InitialCreate
¿Qué hacer si se presenta un error al crear la migración?
En ocasiones, generar una migración podría arrojar errores relacionados con configuraciones. Asegúrate de que el proyecto DataAccess sea establecido como el proyecto de inicio temporalmente para gestionar las migraciones, actualizaciones y carga de bases de datos.
Creación y carga de la base de datos
Después de preparar las migraciones, el siguiente paso es construir y cargar la base de datos real. Aún cuando el código SQL para la estructura de base de datos está listo, su implementación en el servidor SQL incluye algunos pasos adicionales que se tratarán en clases futuras. Además, aprenderemos cómo realizar pre-cargas de datos para asegurar un mejor manejo del entorno informático durante el desarrollo y pruebas. ¡Continúa explorando este interesante camino de la gestión de bases de datos!
Otra forma de ejecutar el comando sin necesidad de poner DataAccess como Startup en Visual Studio es:
add-migration NombreMigracion-s DataAccess
con "-s" indicamos que utilice el ensamblado DataAccess como Startup y asi no debemos estar cambiando en Visual Studio nuestro proyecto de inicio cada vez que necesitemos hacer una migración.
Hola a todos, quisiera añadir la solucion a un error que me surgio, es algo tonto en realidad pero puede que les pase lo siguiente al intentas ejecutar el command:
Could not load assembly 'Inventary'.Ensure it is referenced by the startup project 'DataAccess'.
para solucionar esto veriffiquen en la parte superior de la consola de administracion de paquetes que en el item de Proyecto predeterminado este seleccionado DataAccess
Muy útil, muchas gracias.
Excelente, me estaba pasando!!
Para los que utilizan la autenticación del usuario de Windows para SQLServer esto le puede ayudar en caso de tener problemas con el connection string.
Options.UseSqlServer("Server=localhost; Database=DatabaseName; Trusted_Connection=True");
Gracias bro!
Gracias por el aporte! Tambien aprovecho de comentar que se puede usar de esa forma y luego cuando se quiera pasar a un BBDD en produccion tener otra cadena de conexion en el archivo de 'appsettings.json'
En VSCode el comando equivalente en la terminal de powershell sería
dotnet ef migrations add FirstMigration
Muchas gracias
- Hacer add migration en Mac M1 con PostgreSQL -
Visual Studio para Mac no tiene el "Package manager Console", por lo que es necesario hacer uso de la terminal.app de Mac para poder ejecutar los comandos de dotnet.
Los pasos son los siguientes:
1 - Abrir la terminal de Mac y ejecutar el siguiente comando: dotnet tool install --global dotnet-ef
2 - Dirígete a Visual Studio para instalar el paquete NuGet "Microsoft.EntityFrameworkCore.Design" (hacerlo en la misma carpeta que indica el curso).
3 - Pásate a la terminal y haciendo uso del comando cd ingresa al directorio dónde se encuentra tu solución.
4 - Ejecuta el comando para realizar la migración: dotnet ef migrations add escribeaquíelnombredetumigración
5 - Si no marca error se debe crear la carpeta Migrations en Visual Studio como se muestra en el curso.
Para los que tengan problemas al iniciar con un usuario de SQL Server dentro de Propiedades -> Seguridad, se encuentra la opción para activar la autenticación con SQL Server y Windows Authentication.
Para realizar la migración utilizando Visual Code vamos a ejecutar dentro del mismo orden las siguientes entradas
Recuerda ejecutarlos dentro de la carpeta "DataAccess"
Excelente aporte.
en esta clase de sobreescribe el metodo OnConfiguring, que proviene de la clase DBContext, en este metodo se especifica la conexion al motor de base de datos SQL Server.
Pasos para crear cadena de conexion.
1.Instalar el nuget Microsoft.EntityFrameworkCore.SqlServer
2.en el metodo OnConfiguring , hacer uso del objeto de tipo DbContextOptionsBuilder , para llamar al metodo UseSqlServer, este metodo recibe la cadena de conexion al motor de base de datos, ejemplo de la cadena de conexion "Server=XXX; Database=XXX; User=XXX; Password=XXX".
Pasos para la migración:
1.Abrir la Consola de Manejador de Paquetes o en ingles Package Manager Console
2.instalar el nuget Microsoft.EntityFrameworkCore.Tools
3.Seleccionar el proyecto DataAcces.
4.Establecer como proyecto de inicio a DataAccess, en ingles seria Set as Startup Project
5.Ejecutar el comando add-migration FirstMigration
Despues de los pasos anteriores todavia no se ha creado la base de datos en el motor SQLSERVER, hace falta ejecutar otros comando, unicamente se ha creado la migración
Si les da error después de asignar DataAccess como predeterminado, en la consola: En proyecto predeterminado cambien el nombre del proyecto a DataAccess
Lo pudiste resolver?
Al momento de compilar me salen estos errores. ¿Alguien sabe a qué se deben?
Solucionado. Hay que eliminar las líneas duplicadas.
Hola.
¿Cómo resolviste los errores de las referencias de ensamblado (los errores que tienes primero en la lista)?
Todo bien hasta que ingreso comandos y me da fallido conectar con base de datos, la migracion se hizo exitosa
Podrías poner una captura del error que te aparece y de cómo está creada la cadena de conexión a tu base de datos?
Estoy quedado en esto, si alguno pudiere explicarme, soy nuevo en esto
Alguien sabe como poder hacer el add migration desde en una Mac?. Visual Studio no tiene el "Package Manager Console".
Ya encontré solución, vayan a los aportes para encontrarla. La pondré ahí 😉
Si estas en MAC te recomiendo alojar una instancia sql server en docker. Funciona muy bien.
Si de pronto alguien tiene un fallo al momento de ejecutar
add-migration firsMigration
Primero se debe verificar que ninguna de las otras dos soluciones presente fallas, esto se verifica depurando la solución.
Hola buen dia, alguien sabe si se puede hacer lo mismo pero apuntando a una base de datos Oracle mas precisamente Oracle 10g en 32bits
Alguien hizo las migraciones en VS Code ?
Al utilizar add-migration me sale un error. Sigo los pasos del instructor y me sale Build failed. ¿Será un problema con la instalación de Visual Studio?
Solucionado. Había que instalar el paquete de sql server desde consola de powershell.
Intenté usar appsettings.json para hacer la conexión pero me sucede algo con los métodos estatuco
Puede ser porque te hacen falta unas cositas.
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);// Después de añadir el servicio de arriba colocar estas líneas de código. string connString =ConfigurationExtensions.GetConnectionString(this.Configuration,"DefaultConnection"); services.AddDbContext<EscuelaContext>( options => options.UseSqlServer(connString));
Buenas! al momento de hacer la migracion me sale el siguiente error "Could not load assembly 'BlazorPrueba2022'. Ensure it is referenced by the startup project 'DataAccess'.
" Alguien me puede ayudar? por favorr
para solucionar esto veriffiquen ++en la parte superior de la consola de administracion++ de paquetes que en el item de Proyecto predeterminado este seleccionado DataAccess
¿Puedo hacer todo esto con una base da datos de Azure, o tendria que hacer algun procedimiento adicional?
Puedes conectarte a una base de datos en Azure, AWS o la herramienta que prefieras, está perfecto.
El procedimiento es el mismo, solo cambia la cadena de conexion, le pones tus datos de conexion a tu servidor azure, luego tendrias que configurar el firewall de tu servicio de BD azure para que te permita conectarte y listo.
Tengo un problema con la migración y las versiones de EF puesto que usaba en el vídeo EntityFramework Core vamos por NET 8(aunque para este proyecto use 6), me pide que habilite las migraciones, luego que no encuentra el assembly 'DataAccess', en fin... Alguien sabe si hay alguna actualización del curso?? la verdad es que está muy bien, pero a partir de la migración se tuerce todo