Impossibile creare migrazioni dopo l'aggiornamento ad ASP.NET Core 2.0


109

Dopo l'aggiornamento ad ASP.NET Core 2.0, non riesco più a creare migrazioni.

Sto ottenendo

"Si è verificato un errore durante la chiamata al metodo" BuildWebHost "sulla classe" Program ". Continuazione senza il provider di servizi dell'applicazione. Errore: si sono verificati uno o più errori. (Impossibile aprire il database" ... "richiesto dall'account di accesso. Accesso non riuscito. Accesso non riuscito per l'utente "..." "

e

"Impossibile creare un oggetto di tipo" MyContext ". Aggiungere un'implementazione di" IDesignTimeDbContextFactory "al progetto o vedere https://go.microsoft.com/fwlink/?linkid=851728 per ulteriori modelli supportati in fase di progettazione."

Il comando che ho eseguito in precedenza era $ dotnet ef migrations add InitialCreate --startup-project "..\Web"(dal progetto / cartella con DBContext).

Stringa di connessione: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

Questo è il mio Program.cs

 public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
       WebHost.CreateDefaultBuilder(args)
           .UseStartup<Startup>()
           .Build();
}

3
Forse il problema non è in Program.cs. È probabilmente l'uso di un'istruzione per caricare i dati seed alla fine del metodo Configure: DbInitializer.Initialize (context); Se hai questa istruzione, commentala: //DbInitializer.Initialize(context); Quindi eseguire le istruzioni di migrazione per eseguire il test. Se si verifica il problema, seguire la classe DbInitializer.cs.
Miguel Torres C

1
La tua classe MyContext è in un altro progetto di libreria di classi?
Orhun

Stesso problema qui, il contesto è in un'altra libreria. Se id aggiunge un parametro meno consturctor al contesto, le migrazioni funzionano, ma con lo stesso errore: (Si è verificato un errore durante la chiamata al metodo "BuildWebHost" sulla classe "Program". Continuando senza il provider di servizi dell'applicazione. Errore: Riferimento oggetto non impostato a un'istanza di un oggetto.)
iBoonZ

Alla fine l'hai risolto?
Konrad Viltersten

@MiguelTorresC grazie per quel commento. Ho commentato che i miei metodi di semina e le migrazioni hanno iniziato a funzionare di nuovo. Grazie mille !!!
Amit Philips

Risposte:


123

Puoi aggiungere una classe che implementa IDesignTimeDbContextFactory all'interno del tuo progetto Web.

Ecco il codice di esempio:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new CodingBlastDbContext(builder.Options);
    }
}

Quindi, vai al tuo progetto di database ed esegui quanto segue dalla riga di comando:

dotnet ef migrations add InitialMigration -s ../Web/

dotnet ef database update -s ../Web/

-s stands for startup project and ../Web/ is the location of my web/startup project.

risorsa


2
Ricevo: il file di configurazione "appsettings.json" non è stato trovato e non è facoltativo. Il percorso fisico è "C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api \ bin \ Debug \ netcoreapp2.0 \ appsettings.json". Le mie impostazioni delle app sono in C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api.
Reft

Assicurati di avere il file appsettings.json impostato per la copia locale dovrebbe risolvere il problema con il fatto che non viene trovato
DaImTo

1
Questa soluzione introduce una dipendenza da Entity Framework nell'applicazione host (nel mio caso si tratta di un progetto Web). C'è un modo per aggirarlo? Vorrei che la mia libreria del repository contenga il materiale EF e non introduca EF nell'app Web.
Banoona

Nonostante questa sia la risposta accettata, questa è migliore: stackoverflow.com/a/52671330/1737395 Effettivamente, eseguire la migrazione con il flag --verbose aiuta molto
barbara.post

73

Non ce n'è bisogno IDesignTimeDbContextFactory.

Correre

add-migration initial -verbose

che rivelerà i dettagli sotto

Si è verificato un errore durante l'accesso a IWebHost sulla classe "Program". Continuare senza il fornitore di servizi dell'applicazione.

avviso, che è la causa principale del problema.

Nel mio caso , il problema era, avere ApplicationRole : IdentityRole<int>e invocare services.AddIdentity<ApplicationUser, IdentityRole>()che causava l'errore di seguito

System.ArgumentException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,
TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'.
---> System.TypeLoadException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.UserStoreBase`8[TUser,TRole,TKey,TUserClaim,
TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type parameter 'TRole'.

3
Sì -Verbose aiuta a scoprire effettivamente il vero problema. Nel mio caso non ho aggiunto i servizi AddDbContext all'avvio.
sudhakarssd

3
dotnet ef migrations add InitialCreate --verbose
barbara.post

4
@tchelidze Grazie per questo, nel mio caso non avevo un costruttore senza parametri nel mio ApplicationDbContext.
Tiago Ávila

1
Questo è un suggerimento fantastico, dovrebbe essere la risposta accettata
Avrohom Yisroel

1
Grazie mille, questo mi ha aiutato a trovare il mio problema e risolverlo. Nel mio caso, era un "Nessun costruttore senza parametri definito per il tipo 'Data.Access.DAL.MainDbContext'.", E quindi, ho appena rimosso i parametri dal costruttore e ha funzionato come per magia!
Sarah,

25

Soluzione 1: (trova il problema nel 99% dei casi)

Imposta il progetto dell'applicazione Web come progetto di avvio

Esegui i seguenti comandi con -verboseopzione.

Add-Migration Init -Verbose

-verbose opzione aiuta a scoprire effettivamente il vero problema, contiene errori dettagliati.

Soluzione 2:

Rinomina BuildWebHost()in CreateWebHostBuilder(), perché Entity Framework Core toolsaspettati di trovare un fileCreateHostBuilder metodo che configuri l'host senza eseguire l'app.

.NET Core 2.2

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
} 

.NET Core 3.1

Rinomina BuildWebHost()inCreateHostBuilder()

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Soluzione 3:

Assicurati di aver aggiunto all'inserimento delle Dbcontextdipendenze: AddDbContext<TContext>renderà sia il tuo tipo DbContext TContext, sia il corrispondente DbContextOptions<TContext>disponibile per l'inserimento dal contenitore del servizio. Ciò richiede l'aggiunta di un argomento del costruttore al DbContexttipo che accetta DbContextOptions<TContext>.

Esempio: in Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
}

Codice AppDbContext :

public class AppDbContext: DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
      :base(options)
    { }

}

1
Questo ha funzionato per me. Modificata la funzione BuildWebHost in Program.cs da public static IWebHostBuilder BuildWebHost(string[] args)a public static IWebHost BuildWebHost(string[] args)con .Build()ora inclusa nella funzione
zola25

1
Ragazzi, se si utilizza ASP.NET Core 2.1+ il metodo BuildWebHost avrà un nome diverso: CreateWebHostBuilder a causa di docs.microsoft.com/en-us/aspnet/core/migration/… quindi rinominare CreateWebHostBuilder in BuildWebHost e la migrazione troverà BuildWebHost e prendi DbContext da esso.
KEMBL

2
Grazie amico, risolto dopo aver trascorso 2 ore per configurare senza utilizzareIDesignTimeDbContextFactory
Azri Zakaria

3
Grazie per il flag "-Verbose". Mi ha aiutato a trovare la causa principale dell'eccezione.
Sergey_T

21
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
    }
}

Rinomina semplicemente BuildWebHost()in CreateWebHostBuilder(), perché le migrazioni utilizzano questo metodo per impostazione predefinita.


4
CHE COSA. Questo dovrebbe essere pubblicizzato su ogni pagina che tratta questo problema se sei serio . Successo istantaneo. Grazie.
Chaim Eliyah

Salvami la giornata !!! È un errore molto strano. Sto usando .net core 3.0 con l'anteprima 7 e questo errore esiste ancora
D Todorov

@DTodorov legge questo devblogs.microsoft.com/dotnet/…
sherox

D Todorov Basta rinominare BuildWebHost () in CreateHostBuilder ()
Ali Bayat

1
@WernerCD Cuz Worker utilizza il metodo CreateHostBuilder () che implementa IHostBuilder di Net Core 3
sherox

11

Nel mio caso, la causa del problema erano più progetti di avvio. Ho tre progetti nella mia soluzione: Mvc, Api e Dal. DbContext e Migrations nel progetto Dal.

Avevo configurato più progetti di avvio. Entrambi i progetti Mvc e Api erano in esecuzione quando ho fatto clic su Start. Ma in questo caso stavo ottenendo questo errore.

"Impossibile creare un oggetto di tipo" MyContext ". Aggiungere un'implementazione di" IDesignTimeDbContextFactory "al progetto o vedere https://go.microsoft.com/fwlink/?linkid=851728 per ulteriori modelli supportati in fase di progettazione."

Ho potuto aggiungere correttamente la migrazione dopo aver impostato Mvc come unico progetto di avvio e selezionando Dal nella console di Gestione pacchetti.


1
Grazie, a me è successa la stessa cosa. Ho dovuto cambiare il progetto di avvio nel luogo in cui esistono le classi di avvio / programma. Il messaggio di errore è un brutto scherzo.
Ľuboš Čurgó

1
I messaggi di output erano davvero frustranti. Non avevo selezionato alcun progetto di avvio, inaspettatamente. Questo era il motivo per cui non è stato possibile creare dbContext. Grazie.
upkit

1
Grazie signore ... Risparmio molto del mio tempo
Naveed Khan,

7

In AppContext.cs oltre alla classe AppContext aggiungi un'altra classe:

// required when local database deleted
public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext>
{
    public AppContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<AppContext>();
          builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new AppContext(builder.Options);
    }
}

Questo risolverà il tuo secondo problema:

"Impossibile creare un oggetto di tipo" MyContext ". Aggiungi un'implementazione di" IDesignTimeDbContextFactory "al progetto,

Dopodiché sarai in grado di aggiungere la migrazione iniziale ed eseguirla eseguendo il comando update-database . Tuttavia, se esegui questi comandi quando non c'è ancora un DataBase nel tuo SqlServer locale, riceverai l'avviso come il tuo primo errore: "Un errore

si è verificato durante la chiamata al metodo "BuildWebHost" sulla classe "Program" ... Accesso non riuscito. Accesso non riuscito per l'utente "..." "

Ma non è un errore perché la migrazione verrà creata e potrà essere eseguita. Quindi ignora questo errore per la prima volta, e l'ultima poiché Db esisterà non si verificherà più.


4

verifica di avere il riferimento

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />

5
Sto usando <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />che include quel riferimento. Ho provato anche a includere quanto sopra, ma nessuna modifica.
ruhm

4

Puoi provare questa soluzione da questa discussione , che è stata ispirata da questo post .

public static IWebHost MigrateDatabase(this IWebHost webHost)
{
    using (var scope = webHost.Services.CreateScope())
    {
        var services = scope.ServiceProvider;

        try
        {
            var db = services.GetRequiredService<MyContext>();
            db.Database.Migrate();
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while migrating the database.");
        }
    }

    return webHost;
}
public static void Main(string[] args)
{
    BuildWebHost(args)
        .MigrateDatabase()
        .Run();
}

2
Sto ancora ottenendo: Aggiungi un'implementazione di 'IDesignTimeDbContextFactory <DatabaseContext>' ......
Reft

4

Qualcosa che mi ha davvero aiutato è stato questo articolo: https://elanderson.net/2017/09/unable-to-create-an-object-of-type-applicationdbcontext-add-an-implementation-of-idesigntimedbcontextfactory/

L'idea di base è che nel passaggio da .net core 1 a 2 tutte le inizializzazioni del db dovrebbero essere spostate da StartUp.cs e in Program.cs. In caso contrario, le attività EF tentano di eseguire gli init del database durante l'esecuzione delle attività.

"C'è una bella sezione nei documenti ufficiali di migrazione ( https://docs.microsoft.com/en-us/ef/core/miscellaneous/1x-2x-upgrade ) intitolata" Spostare il codice di inizializzazione del database "che mi sembrava di avere perso. Quindi, prima di andare in giro per le tane del coniglio come ho fatto io, assicurati che questo non sia ciò che sta causando la tua necessità di aggiungere un'implementazione di IdesignTimeDbContextFactory. "


Grazie, anche questo mi ha aiutato.
Sergey

3

A partire dal

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation

Quando crei una nuova applicazione ASP.NET Core 2.0, questo hook è incluso per impostazione predefinita. Nelle versioni precedenti di EF Core e ASP.NET Core, gli strumenti tentano di richiamare direttamente Startup.ConfigureServices per ottenere il provider di servizi dell'applicazione, ma questo modello non funziona più correttamente nelle applicazioni ASP.NET Core 2.0. Se si aggiorna un'applicazione ASP.NET Core 1.x alla 2.0, è possibile modificare la classe Program per seguire il nuovo modello.

Aggiungi Factory in .Net Core 2.x

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
    {
        public BloggingContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
            optionsBuilder.UseSqlite("Data Source=blog.db");

            return new BloggingContext(optionsBuilder.Options);
        }
    }

3

Ho avuto questo problema e questo è stato risolto da Set -> Web Application (Included Program.cs) Project su -> "Set as Startup Project"

Quindi esegui -> aggiungi-migrazione iniziale -verbose

nella console di Gestione pacchetti

Imposta come progetto di avvio


Grazie, l'unica soluzione che ha funzionato per me è stata impostare il progetto web come progetto di avvio ed è esattamente ciò che doveva essere fatto.
user3012760

3

Se vuoi evitare quelle cose IDesignTimeDbContextFactory: assicurati solo di non utilizzare alcun metodo Seed all'avvio. Stavo usando un metodo seed statico nel mio avvio e stava causando questo errore per me.


2

In precedenza, hai configurato i dati di inizializzazione nel metodo Configure in Startup.cs. Si consiglia ora di utilizzare il metodo Configure solo per impostare la pipeline delle richieste. Il codice di avvio dell'applicazione appartiene al metodo Main.

Il metodo Main refactoring. Aggiungere i seguenti riferimenti a Program.cs:

using Microsoft.Extensions.DependencyInjection;

using MyProject.MyDbContextFolder;

public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService<MyDbConext>();
            DbInitializer.Initialize(context);
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}



2

Nel mio caso ho riscontrato il problema perché avevo un metodo chiamato SeedData.EnsurePopulated () che veniva chiamato sul mio file Startup.cs .

public class Startup
{
    public Startup(IConfiguration configuration) => Configuration = configuration;
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        //
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseDeveloperExceptionPage();
        app.UseStatusCodePages();
        app.UseStaticFiles();
        app.UseSession();
        app.UseMvc(routes =>
        {
            //
        });

        SeedData.EnsurePopulated(app);
    }
}

Il lavoro della classe SeedData consiste nell'aggiungere i dati iniziali alla tabella del database. Il suo codice è:

public static void EnsurePopulated(IApplicationBuilder app)
    {
        ApplicationDbContext context = app.ApplicationServices.GetRequiredService<ApplicationDbContext>();
        context.Database.Migrate();
        if (!context.Products.Any())
        {
            context.Products.AddRange(
            new Product
            {
                Name = "Kayak",
                Description = "A boat for one person",
                Category = "Watersports",
                Price = 275
            },
            ....
            );
            context.SaveChanges();
        }
    }

SOLUZIONE

Prima di eseguire la migrazione, commentare semplicemente la chiamata della classe SeedData nel file Startup.cs.

// SeedData.EnsurePopulated(app);

Questo ha risolto il mio problema e spero che anche il tuo problema venga risolto allo stesso modo.


1

Ho incontrato lo stesso problema. Ho due progetti nella soluzione. quale

  1. API
  2. Servizi e repo, che contengono modelli di contesto

Inizialmente, il progetto API era impostato come progetto di avvio.

Ho cambiato il progetto di avvio con quello che contiene le classi di contesto. se stai usando Visual Studio puoi impostare un progetto come progetto di avvio tramite:

apri Esplora soluzioni >> fai clic con il pulsante destro del mouse sul progetto contestuale >> seleziona Imposta come progetto di avvio


1

Prima di tutto assicurati di aver configurato il tuo database nel Startup.cs mio caso, ho ricevuto questo errore poiché non ho specificato quanto segue inStartup.cs

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("<Your Project Assembly name where DBContext class resides>")));

1

Utilizzando ASP.NET Core 3.1 e EntityFrameWorkCore 3.1.0. Sostituzione di OnConfiguring della classe di contesto solo con un costruttore senza parametri

```protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json")
               .Build();
            var connectionString = configuration.GetConnectionString("LibraryConnection");
            optionsBuilder.UseSqlServer(connectionString);
        }
    }
```

1

Stavo affrontando l'errore

"Impossibile creare un oggetto di tipo" MyContext ". Aggiungi un'implementazione di" IDesignTimeDbContextFactory "al progetto oppure consulta https://go.microsoft.com/fwlink/?linkid=851728 per ulteriori modelli supportati in fase di progettazione."

Ecco come è stato risolto il mio problema. Esegui il comando seguente mentre ti trovi nella directory della soluzione

 dotnet ef migrations add InitialMigration --project "Blog.Infrastructure" --startup-project "Blog.Appication"

Qui Application è il mio progetto di avvio contenente la classe Startup.cs & Infrastructure è il mio progetto contenente la classe DbContext.

quindi eseguire l'aggiornamento utilizzando la stessa struttura.

dotnet ef database update --project "Blog.Infrastructure" --startup-project "Blog.Application"

0

Ho avuto lo stesso problema da quando mi riferivo al vecchio Microsoft.EntityFrameworkCore.Tools.DotNet

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />

Dopo l'aggiornamento alla versione più recente è stato risolto


0

Nel file appsettings.json del progetto principale, avevo impostato "Copia nella directory di output" su "Copia sempre" e ha funzionato.


0

Classe di contesto DB di esempio per applicazioni console .net core

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace EmailServerConsole.Data
{
    public class EmailDBContext : DbContext
    {
        public EmailDBContext(DbContextOptions<EmailDBContext> options) : base(options) { }
        public DbSet<EmailQueue> EmailsQueue { get; set; }
    }

    public class ApplicationContextDbFactory : IDesignTimeDbContextFactory<EmailDBContext>
    {
        EmailDBContext IDesignTimeDbContextFactory<EmailDBContext>.CreateDbContext(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            var builder = new DbContextOptionsBuilder<EmailDBContext>();
            var connectionString = configuration.GetConnectionString("connection_string");
            builder.UseSqlServer(connectionString);
            return new EmailDBContext(builder.Options);
        }
    }
}

Anche se questo potrebbe rispondere alla domanda degli autori, mancano alcune parole esplicative e collegamenti alla documentazione. I frammenti di codice non elaborati non sono molto utili senza alcune frasi intorno ad esso. Potresti anche trovare molto utile come scrivere una buona risposta . Modifica la tua risposta.
hellow

0

È inoltre possibile utilizzare nel costruttore della classe di avvio per aggiungere il file json (dove si trova la stringa di connessione) alla configurazione. Esempio:

    IConfigurationRoot _config;
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json");

        _config = builder.Build();
    }

0

Per me è stato perché ho cambiato il Output Typedel mio progetto di avvio da Console ApplicationaClass Library .

Tornare a ha Console Applicationfatto il trucco.


0

Ho riscontrato questo problema in una soluzione che ha:

  • un progetto .NET Core 2.2 MVC
  • un progetto .NET Core 3.0 Blazor
  • Il contesto del database in un progetto di libreria di classi .NET Standard 2.0

Ottengo il messaggio "impossibile creare un oggetto ..." quando il progetto Blazor è impostato come progetto di avvio, ma non se il progetto MVC è impostato come progetto di avvio.

Questo mi lascia perplesso, perché nella console di Gestione pacchetti (che è dove sto creando la migrazione) ho il progetto predefinito impostato su una libreria di classi C # che contiene effettivamente il contesto DB e sto anche specificando il contesto DB in la mia chiamata a add-migration add-migration MigrationName -context ContextName, quindi sembra strano che Visual Studio si preoccupi del progetto di avvio attualmente impostato.

Immagino che il motivo sia che quando il progetto Blazor è il progetto di avvio, il PMC determina la versione di .NET come Core 3.0 dal progetto di avvio e quindi cerca di usarlo per eseguire le migrazioni sulla classe .NET Standard 2.0 biblioteca e colpire un conflitto di qualche tipo.

Qualunque sia la causa, la modifica del progetto di avvio nel progetto MVC che ha come target Core 2.2, piuttosto che il progetto Blazor, ha risolto il problema


0

Per me il problema era che stavo eseguendo i comandi di migrazione all'interno del progetto sbagliato. L'esecuzione dei comandi all'interno del progetto che conteneva Startup.cs piuttosto che il progetto che conteneva DbContext mi ha permesso di superare questo particolare problema.


0

Nel mio caso l'impostazione del progetto StartUp in init aiuta. Puoi farlo eseguendo

dotnet ef migrations add init -s ../StartUpProjectName

-4

Ho avuto lo stesso problema. Ho appena cambiato ap.jason in application.jason e il problema è stato risolto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.