Hola amigos, en este caso me encontraba trabajando con un proyecto en Visual Studio 2022 que tengo divido diversas capas, una es la Data Access Layer (DAL) o capa d de acceso a datos, dicha capa es la encargada de manejar el contexto para Entity Framework Core.
El problema es que tengo un connection string para local y otro para Release que a su vez se obtiene desde otro proyecto (Web API), el código es el siguiente:
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
bool isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development";
var connectionStringDev = "/../DiarioWebAPI/appsettings.json";
var connectionStringRelease = "/../DiarioWebAPI/appsettings.Release.json";
var connection = isDevelopment ? connectionStringDev : connectionStringRelease;
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(@Directory.GetCurrentDirectory() + connection).Build();
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString = configuration.GetSection("ConnectionStrings")["defaultConnection"];
builder.UseSqlServer(connectionString);
return new ApplicationDbContext(builder.Options);
}
}
Como podemos ver, dependiendo el valor de [ASPNETCORE_ENVIRONMENT] tomara la configuración de uno u otro archivo, al hacer un despliegue o publish, esta variable se puede establecer muy fácilmente, sin embargo, no sabía cómo realizarlo en la Package Manager Console, lo cual simplemente se resuelve ejecutando el siguiente comando, sea para development, production etc:
PM> $env:ASPNETCORE_ENVIRONMENT='Production'
PM> $env:ASPNETCORE_ENVIRONMENT='Development'
Después de esto, mi comando add-migration y posteriormente updata-database funcionó correctamente con las cadenas de conexión adecuadas.