Sto cercando di usare Ef Core nel mio progetto.
La struttura è un po 'diversa, nel senso che non sto usando EfCore insita il WebApi.csproj. In effetti ho una dll diversa. e un DependenciesResolver.dll che gestisce tutte le mie iniezioni di dipendenza.
Nel mio EfCore.dll ho installato entrambi
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.SqlServer
Ora quando provo a eseguire il comando (la DLL in cui sto eseguendo è EfCore.dll)
Add-Migration Name
Ho capito:
Si è verificato un errore durante l'accesso a IWebHost sulla classe 'Programma'. Continua senza il fornitore di servizi applicativi. Errore: il riferimento all'oggetto non è impostato su un'istanza di un oggetto. Impossibile creare un oggetto di tipo "StoreContext". Aggiungere un'implementazione di "IDesignTimeDbContextFactory" al progetto o consultare https://go.microsoft.com/fwlink/?linkid=851728 per ulteriori modelli supportati in fase di progettazione.
La struttura della sln è così
WebApi | EfCore.dll | DependencyResolver.dll e voglio mantenerlo in questo modo, non voglio permettere l'uso di EfCore nel mio WebApi.
Qual è la risoluzione per questo problema?
Se questo aiuta all'interno di EfCore.dll, ho questo.
public sealed partial class StoreContext : DbContext, IStoreContext
{
private string _connectionString;
public StoreContext(string connectionString) : base()
{
_connectionString = connectionString;
Database.EnsureCreated();
}
/// db.tbls
public DbSet<Order> Orders { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.AddOrderConfiguration();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}
che è chiamato da DependencyResolver come questo
private DependenciesResolver RegisterInfrastructure()
{
_serviceCollection.AddScoped<StoreContext>(factory => new StoreContext(_connectionString));
return this;
}
e DependencyResolver viene quindi chiamato da WebApi
Dai un'occhiata a questo: https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation
Il messaggio di errore specifica chiaramente che gli strumenti EF Core non possono creare un'istanza del contesto in fase di progettazione.
Se è possibile definire un costruttore senza parametri per StoreContext che funzioni, altrimenti è necessario indicare agli strumenti come creare un'istanza del contesto in fase di progettazione definendo una classe che implementa l'interfaccia IDesignTimeDbContextFactory.