Estoy creando una API web ASP .NET Core usando la vista previa VS 2019 y .NET Core 3.0. Cuando intento ejecutar: agregar-migración, aparece el error: "No se puede crear un objeto de tipo 'AppDbContext'. Para los diferentes patrones admitidos en tiempo de diseño, ..."
A continuación se muestra mi archivo de contexto:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{ }
public DbSet<Categoria> Categorias { get; set; }
public DbSet<Produto> Produtos { get; set; }
}
Mi método ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllers().AddNewtonsoftJson();
}
My appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;DataBase....."
},
...
}
Siempre uso este enfoque y funciona.
También intenté crear un constructor vacío en la clase de contexto y recibí este error: "System.InvalidOperationException: no se ha configurado ningún proveedor de base de datos para este DbContext ..."
¿Estoy olvidando algunos detalles?
nota: esto funciona bien en ASP .NET Core 2.2
Puede indicarle a la migración cómo crear su DbContext
implementando la IDesignTimeDbContextFactory<TContext>
: si se encuentra una clase que implementa esta interfaz en el mismo proyecto que el DbContext
derivado o en el proyecto de inicio de la aplicación, las herramientas omiten las otras formas de crear el DbContext
y usar la fábrica de tiempo de diseño en su lugar.
para más información ver este enlace
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Infrastructure;
namespace MyProject
{
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
public AppDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
optionsBuilder.UseMySql("Server=localhost;DataBase.....");
return new AppDbContext(optionsBuilder.Options);
}
}
}