Ora sto sviluppando un API Web utilizzando API Web core ASP.NET. Questa è la prima volta che utilizzo il nucleo di ASP.NET. Ero uno sviluppatore ASP.NET MVC. Ma sono stato lontano per un po '. Quello che sto facendo ora è la creazione di una classe DbContext
per Entity Framework che esegue il comando di migrazione. Ma sto usando tre diversi progetti per separare la logica.
Questa è la mia struttura di progetto:
[! [inserisci la descrizione dell'immagine qui] [1]] [1]
Ho installato i seguenti pacchetti.
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Projectname thegoodyard.api
Install-Package Microsoft.EntityFrameworkCore.Tools -Projectname thegoodyard.api
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Projectname thegoodyard.api
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Projectname thegoodyard.domain
Install-Package Microsoft.EntityFrameworkCore.Tools -Projectname thegoodyard.domain
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Projectname thegoodyard.domain
Nel progetto thegoodyard.domain
, ho creato una classe di contesto DB chiamata ThegoodyardContext.cs
con la seguente definizione.
namespace thegoodyard.domain.Concrete
{
public virtual DbSet<Category> Categories { get; set; }
public partial class ThegoodyardContext: DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if(!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=ThegoodyardContext;Trusted_Connection=True; MultipleActiveResultSets=true");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
}
}
Quindi nel progetto Thegoodyard.api
, nel metodo ConfigureServices
della classe StartUp
, ho registrato il contesto in questo modo:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<thegoodyard.domain.Concrete.ThegoodyardContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ThegoodyardContext")));
}
Quindi ho abilitato la migrazione con il seguente comando
enable-migration -projectname thegoodyard.api
Ma ha detto, il comando è troppo vecchio, usa invece l'add-migration. L'ho usato invece.
add-migration CreateCategory
Quindi ho ricevuto il seguente errore
Si è verificato un errore durante l'accesso a IWebHost sulla classe 'Programma'. Continua senza il fornitore di servizi applicativi. Errore: AddDbContext è stato chiamato con la configurazione, ma il tipo di contesto 'ThegoodyardContext' dichiara solo un costruttore senza parametri. Ciò significa che la configurazione passata a AddDbContext non verrà mai utilizzata. Se la configurazione viene passata a AddDbContext, quindi 'ThegoodyardContext' dovrebbe dichiarare un costruttore che accetta un DbContextOptions e deve passarlo al costruttore base per DbContext.
Nessun DbContext è stato trovato nell'assembly 'thegoodyard.api'. Assicurati di utilizzare l'assembly corretto e che il tipo non sia né astratto né generico.
Come posso ripararlo?
Aprire la console del gestore pacchetti
Progetto predefinito: "Seleziona il nome del tuo livello", come:
thegoodyard.domain
then
Enable-Migrations
Per favore controlla questo link http://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx