Sto creando un'API Web ASP .NET Core utilizzando l'anteprima di VS 2019 e .NET Core 3.0. Quando provo a eseguire: add-migration, visualizzo l'errore: "Impossibile creare un oggetto di tipo 'AppDbContext'. Per i diversi schemi supportati in fase di progettazione, ..."
Di seguito è il mio file di contesto:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{ }
public DbSet<Categoria> Categorias { get; set; }
public DbSet<Produto> Produtos { get; set; }
}
Metodo My 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....."
},
...
}
Uso sempre questo approccio e funziona.
Ho anche provato a creare un costruttore vuoto nella classe di contesto e ho visualizzato questo errore: "System.InvalidOperationException: nessun provider di database è stato configurato per questo DbContext ..."
Sto dimenticando qualche dettaglio?
nota: funziona perfettamente in ASP .NET Core 2.2
Puoi dire alla migrazione come creare il tuo DbContext
implementando l' IDesignTimeDbContextFactory<TContext>
: se una classe che implementa questa interfaccia si trova nello stesso progetto del DbContext
derivato o nel progetto di avvio dell'applicazione, gli strumenti ignorano gli altri modi di creando il DbContext
e utilizzare invece la factory di design-time.
per ulteriori informazioni consultare questo link
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);
}
}
}