Ruta de archivo diferente en despliegue de webapp.
Tenemos un conjunto de código para migración de base de datos que ejecutamos con la configuración personalizada en las clases siguientes:
builder.HasData(SeedDataHelper.SeedFromJson<Make>("../Project/Seeds/Makes.json"));
Y esto funciona bien al realizar una migración local.
El problema surge cuando desplegamos la aplicación, la nueva ruta de archivo para los seeds es:
../wwwroot/Seeds/Makes.json
¿Existe alguna manera de mantener la misma ruta después del despliegue o tener una configuración para determinar qué ruta utilizar?
He intentado agregar un archivo local.settings.json y decirle a la aplicación inicial que lea el json en variables de entorno. Pero al usar GetEnvironmentalVariable, obtengo null como resultado.
davy.ai
Posible solución para el problema con el código de migración de la base de datos
Una forma de resolver el problema con el código de migración de la base de datos es modificar la ruta de forma dinámica según el entorno de ejecución. Esto se puede lograr utilizando la interfaz
IWebHostEnvironment
proporcionada por ASP.NET Core.Primero, agregue un constructor a la clase de configuración de migración que tome
IWebHostEnvironment
como parámetro:Luego, modifique el método
ConfigureServices
enStartup.cs
para inyectar una instancia deIWebHostEnvironment
:Ahora, puedes usar
IWebHostEnvironment
para obtener la ruta raíz del contenido de forma dinámica según el entorno de ejecución. La ruta del archivo de semilla se puede construir utilizando este valor y pasarse al métodoSeedFromJson
.Además, puedes usar la configuración para definir la ruta de los archivos de semilla en lugar de codificarla en el código de migración. Esto se puede hacer agregando una nueva configuración en
appsettings.json
, por ejemplo:Luego, puedes inyectar una instancia de
IConfiguration
en la clase de configuración de migración y obtener el valor de la configuración:Esto te permite configurar la ruta de los archivos de semilla utilizando diferentes fuentes de configuración, como variables de entorno o argumentos de línea de comandos.