No se pueden crear migraciones después de actualizar a ASP.NET Core 2.0

109

Después de actualizar a ASP.NET Core 2.0, parece que ya no puedo crear migraciones.

Me estoy poniendo

"Se produjo un error al llamar al método 'BuildWebHost' en la clase 'Programa'. Continuando sin el proveedor de servicios de la aplicación. Error: Se produjeron uno o más errores. (No se puede abrir la base de datos" ... "solicitada por el inicio de sesión. El inicio de sesión falló. Iniciar sesión falló para el usuario '...' "

y

"No se puede crear un objeto de tipo 'MyContext'. Agregue una implementación de 'IDesignTimeDbContextFactory' al proyecto, o consulte https://go.microsoft.com/fwlink/?linkid=851728 para obtener patrones adicionales admitidos en tiempo de diseño".

El comando que ejecuté anteriormente fue $ dotnet ef migrations add InitialCreate --startup-project "..\Web"(del proyecto / carpeta con DBContext).

Cadena de conexión: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

Este es mi 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();
}
ruhm
fuente
3
Posiblemente el problema no esté en Program.cs. Probablemente sea el uso de una instrucción para cargar datos semilla al final de su método Configure: DbInitializer.Initialize (context); Si tiene esa instrucción, coméntela: //DbInitializer.Initialize(context); Luego, ejecute las instrucciones de migración para probar. Si surge el problema, haga un seguimiento de la clase DbInitializer.cs.
Miguel Torres C
1
¿Está su clase MyContext en otro proyecto de biblioteca de clases?
Orhun
El mismo problema aquí, el contexto está en otra biblioteca. Si id agrega un parámetro menos consturctor al contexto, las migraciones están funcionando, pero con el mismo error: (Se produjo un error al llamar al método 'BuildWebHost' en la clase 'Programa'. Continuando sin el proveedor de servicios de la aplicación. Error: Referencia de objeto no establecida a una instancia de un objeto.)
iBoonZ
¿Lo resolviste al final?
Konrad Viltersten
@MiguelTorresC gracias por ese comentario. Comenté que mis métodos de siembra y las migraciones comenzaron a funcionar nuevamente. Gracias una tonelada !!!
Amit Philips

Respuestas:

123

Puede agregar una clase que implemente IDesignTimeDbContextFactory dentro de su proyecto web.

Aquí está el código de ejemplo:

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);
    }
}

Luego, navegue hasta su proyecto de base de datos y ejecute lo siguiente desde la línea de 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.

recurso

jaaso
fuente
2
Recibo: El archivo de configuración 'appsettings.json' no se encontró y no es opcional. La ruta física es 'C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api \ bin \ Debug \ netcoreapp2.0 \ appsettings.json'. La configuración de mi aplicación está en C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api.
Reft
Asegúrese de tener el archivo appsettings.json configurado para copiar localmente debería solucionar el problema y no se encuentra
DaImTo
1
Esta solución introduce una dependencia de Entity Framework en su aplicación de host (en mi caso, este es un proyecto web). ¿Hay alguna forma de evitar esto? Me gustaría que mi biblioteca de repositorio contenga las cosas de EF y no introduzca EF en la aplicación web.
Banoona
A pesar de que esta es la respuesta aceptada, esta es mejor: stackoverflow.com/a/52671330/1737395 De hecho, ejecutar la migración con la bandera --verbose ayuda enormemente
barbara.post
73

No es necesario IDesignTimeDbContextFactory.

correr

add-migration initial -verbose

que revelará los detalles debajo

Se produjo un error al acceder a IWebHost en la clase 'Programa'. Continuar sin el proveedor de servicios de la aplicación.

advertencia, que es la causa raíz del problema.

En mi caso , el problema fue tener ApplicationRole : IdentityRole<int>e invocar lo services.AddIdentity<ApplicationUser, IdentityRole>()que estaba causando el siguiente error

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'.
tchelidze
fuente
3
Sí -Verbose ayuda a descubrir el problema real. En mi caso, no he agregado los servicios AddDbContext al inicio.
sudhakarssd
3
migraciones de dotnet ef agregan InitialCreate --verbose
barbara.post
4
@tchelidze Gracias por eso, en mi caso no tenía un constructor sin parámetros en mi ApplicationDbContext.
Tiago Ávila
1
Este es un consejo fantástico, debería ser la respuesta aceptada
Avrohom Yisroel
1
Muchas gracias, esto me ayudó a encontrar mi problema y resolverlo. En mi caso, era un "Ningún constructor sin parámetros definido para el tipo 'Data.Access.DAL.MainDbContext'.", Y por lo tanto, simplemente eliminé los parámetros del constructor y ¡funcionó como magia!
Sarah
25

Solución 1: (Encuentre el problema en el 99% de los casos)

Establecer proyecto de aplicación web como proyecto de inicio

Ejecute los siguientes comandos con la -verboseopción.

Add-Migration Init -Verbose

-verbose La opción ayuda a descubrir el problema real. Contiene errores detallados.

Solución 2:

Cambie el nombre BuildWebHost()a CreateWebHostBuilder(), porque Entity Framework Core toolsespere encontrar un CreateHostBuildermétodo que configure el host sin ejecutar la aplicación.

.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

Cambiar nombre BuildWebHost()aCreateHostBuilder()

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>();
            });
}

Solución 3:

Asegúrese de haber agregado Dbcontexta la inyección de dependencia: AddDbContext<TContext>hará que tanto su tipo DbContext TContext, como el correspondiente DbContextOptions<TContext>estén disponibles para la inyección desde el contenedor de servicios. Esto requiere agregar un argumento de constructor a su DbContexttipo que aceptaDbContextOptions<TContext> .

Ejemplo: en Startup.cs

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

Código de AppDbContext :

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

}
Ali Bayat
fuente
1
Esto funcionó para mí. Se cambió la función BuildWebHost en Program.cs de public static IWebHostBuilder BuildWebHost(string[] args)a public static IWebHost BuildWebHost(string[] args)con la .Build()ahora incluida en la función
zola25
1
Chicos, si está utilizando ASP.NET Core 2.1+, el método BuildWebHost tendrá un nombre diferente: CreateWebHostBuilder debido a docs.microsoft.com/en-us/aspnet/core/migration/ ... así que cambie el nombre de CreateWebHostBuilder a BuildWebHost y la migración encontrará BuildWebHost y tome DbContext de él.
KEMBL
2
Gracias amigo, resuelto después de pasar 2 horas para configurar sin usarIDesignTimeDbContextFactory
Azri Zakaria
3
Gracias por la bandera "-Verbose". Me ha ayudado a encontrar la causa raíz de la excepción.
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();
    }
}

Simplemente cambie el nombre BuildWebHost()a CreateWebHostBuilder(), porque las migraciones usan este método de forma predeterminada.

sherox
fuente
4
QUÉ. Esto debe anunciarse en todas las páginas que se ocupan de este problema , en serio . Éxito instantáneo. Gracias.
Chaim Eliyah
¡Salva mi día! Es un error muy extraño. Estoy usando .net core 3.0 con la vista previa 7 y este error todavía existe
D Todorov
@DTodorov leer este devblogs.microsoft.com/dotnet/…
sherox
D Todorov Simplemente cambie el nombre de BuildWebHost () a CreateHostBuilder ()
Ali Bayat
1
@WernerCD Cuz Worker usa el método CreateHostBuilder () que implementa IHostBuilder de Net Core 3
sherox
11

En mi caso, la causa del problema fueron varios proyectos de inicio. Tengo tres proyectos en mi solución: Mvc, Api y Dal. DbContext y Migraciones en el proyecto Dal.

Había configurado varios proyectos de inicio. Los proyectos Mvc y Api se estaban ejecutando cuando hice clic en Iniciar. Pero en este caso recibí este error.

"No se puede crear un objeto de tipo 'MyContext'. Agregue una implementación de 'IDesignTimeDbContextFactory' al proyecto, o consulte https://go.microsoft.com/fwlink/?linkid=851728 para obtener patrones adicionales admitidos en tiempo de diseño".

Pude agregar la migración con éxito después de configurar Mvc como el único proyecto de inicio y seleccionar Dal en la Consola del Administrador de paquetes.

Gürol Mehmet Çetin
fuente
1
Gracias, me pasó lo mismo a mí. Tuve que cambiar el proyecto de inicio al lugar donde existen las clases de inicio / programa. El mensaje de error es una broma de mal gusto.
Ľuboš Čurgó
1
Los mensajes de salida fueron realmente frustrantes. No tenía ningún proyecto de inicio seleccionado, inesperadamente. Esta fue la razón por la que no se pudo crear dbContext. Gracias.
upkit
1
Gracias señor ... Me ahorré mucho tiempo
Naveed Khan
7

En AppContext.cs además de la clase AppContext agregue otra clase:

// 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);
    }
}

Esto resolverá su segundo problema:

"No se puede crear un objeto de tipo 'MyContext'. Agrega una implementación de 'IDesignTimeDbContextFactory' al proyecto,

Después de eso, podrá agregar la migración inicial y ejecutarla ejecutando el comando update-database . Sin embargo, si ejecuta estos comandos cuando aún no hay una base de datos en su SqlServer local, recibirá una advertencia como su primer error: "Un error

ocurrió al llamar al método 'BuildWebHost' en la clase 'Programa' ... Error de inicio de sesión. Error de usuario '...'"

Pero no es un error porque se creará la migración y se podrá ejecutar. Así que simplemente ignore este error por primera vez, y luego, dado que Db existirá, no volverá a suceder.

borisdj
fuente
4

por favor verifique que tiene la referencia

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
Vladmir
fuente
5
Estoy usando el <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />que incluye esa referencia. Intenté también incluir lo anterior, pero sin cambios.
ruhm
4

Puede probar esta solución de esta discusión , que se inspiró en esta publicación .

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();
}
usuario2771704
fuente
2
Todavía obtengo: agregue una implementación de 'IDesignTimeDbContextFactory <DatabaseContext>' ......
Reft
4

Algo que realmente me ayudó fue este artículo: https://elanderson.net/2017/09/unable-to-create-an-object-of-type-applicationdbcontext-add-an-implementation-of-idesigntimedbcontextfactory/

La idea básica es que en el cambio de .net core 1 a 2, toda la inicialización de db se debe mover fuera de StartUp.cs y en Program.cs. De lo contrario, las tareas de EF intentan ejecutar sus inicios de base de datos cuando realizan tareas.

"Hay una buena sección en los documentos oficiales de migración ( https://docs.microsoft.com/en-us/ef/core/misiverse/1x-2x-upgrade ) titulada" Mover el código de inicialización de la base de datos "que parecía tener así que antes de que te dirijas a cualquier agujero de conejo, como lo hice, asegúrate de que esto no sea lo que está causando tu necesidad de agregar una implementación de IdesignTimeDbContextFactory ".

Rtype
fuente
Gracias, esto también me ayudó.
Sergey
3

De

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

Cuando crea una nueva aplicación ASP.NET Core 2.0, este enlace se incluye de forma predeterminada. En versiones anteriores de EF Core y ASP.NET Core, las herramientas intentan invocar Startup.ConfigureServices directamente para obtener el proveedor de servicios de la aplicación, pero este patrón ya no funciona correctamente en aplicaciones ASP.NET Core 2.0. Si está actualizando una aplicación ASP.NET Core 1.xa 2.0, puede modificar su clase Program para seguir el nuevo patrón.

Agregar Factory en .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);
        }
    }
Anton Swanevelder
fuente
3

Tuve este problema y esto resuelto por Set -> Aplicación web (Program.cs incluido) Proyecto a -> "Establecer como proyecto de inicio"

Luego ejecute -> add-migration initial -verbose

en la consola del administrador de paquetes

Establecer como proyecto de inicio

Ali Ahmadi
fuente
Gracias, la única solución que funcionó para mí fue establecer el proyecto web como proyecto de inicio y eso es exactamente lo que se necesitaba hacer.
user3012760
3

Si desea evitar esas cosas de IDesignTimeDbContextFactory: solo asegúrese de no usar ningún método Seed en su inicio. Estaba usando un método de semilla estática en mi inicio y me estaba causando este error.

codeYouLaterBro
fuente
2

Previamente, configuró los datos semilla en el método Configure en Startup.cs. Ahora se recomienda que utilice el método Configure solo para configurar la canalización de solicitudes. El código de inicio de la aplicación pertenece al método Main.

El método Main refactorizado. Agregue las siguientes referencias a Program.cs:

utilizando Microsoft.Extensions.DependencyInjection;

usando 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();
}

Miguel Torres C
fuente
2

En mi caso, tuve el problema porque tenía un método llamado SeedData.EnsurePopulated () en mi archivo 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);
    }
}

El trabajo de la clase SeedData es agregar datos iniciales a la tabla de la base de datos. Su código es:

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();
        }
    }

SOLUCIÓN

Antes de realizar la migración, simplemente comente la llamada de la clase SeedData en el archivo Startup.cs.

// SeedData.EnsurePopulated(app);

Eso resolvió mi problema y espero que su problema también se resuelva de la misma manera.

yogui
fuente
1

Me encontré con el mismo problema. Tengo dos proyectos en la solución. cual

  1. API
  2. Servicios y repositorios, que contienen modelos de contexto

Inicialmente, el proyecto de API se estableció como proyecto de inicio.

Cambié el proyecto de inicio por uno que contiene clases de contexto. si está utilizando Visual Studio , puede establecer un proyecto como proyecto de inicio mediante:

abrir el explorador de soluciones >> hacer clic con el botón derecho en el proyecto de contexto >> seleccionar Establecer como proyecto de inicio

Vikas
fuente
1

En primer lugar, asegúrese de haber configurado su base de datos en Startup.cs En mi caso, recibí este error ya que no especifiqué lo siguiente enStartup.cs

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

Usando ASP.NET Core 3.1 y EntityFrameWorkCore 3.1.0. Anulando el OnConfiguring de la clase de contexto con un constructor sin parámetros solamente

```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);
        }
    }
```
Francis
fuente
1

Estaba enfrentando el error

"No se puede crear un objeto de tipo 'MyContext'. Agregue una implementación de 'IDesignTimeDbContextFactory' al proyecto, o consulte https://go.microsoft.com/fwlink/?linkid=851728 para obtener patrones adicionales admitidos en tiempo de diseño".

Así fue como se resolvió mi problema. Ejecute el siguiente comando mientras se encuentra en el directorio de su solución

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

Aquí la aplicación es mi proyecto de inicio que contiene la clase Startup.cs y la infraestructura es mi proyecto que contiene la clase DbContext.

luego ejecute la actualización usando la misma estructura.

dotnet ef database update --project "Blog.Infrastructure" --startup-project "Blog.Application"
Manzur Alahi
fuente
0

Tengo el mismo problema porque me estaba refiriendo a Microsoft.EntityFrameworkCore.Tools.DotNet antiguo

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

Después de actualizar a la versión más nueva, se resolvió

vinayak hegde
fuente
0

En el archivo appsettings.json del proyecto principal, había configurado 'Copiar al directorio de salida' en "Copiar siempre" y funcionó.

conseguir
fuente
0

Ejemplo de clase de contexto de base de datos para aplicaciones de consola central .net

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);
        }
    }
}
Isanka Thalagala
fuente
Si bien esto podría responder a la pregunta de los autores, carece de algunas palabras explicativas y enlaces a la documentación. Los fragmentos de código sin formato no son muy útiles sin algunas frases a su alrededor. También puede resultarle muy útil cómo escribir una buena respuesta . Edite su respuesta.
hola
0

También puede usar en el constructor de la clase de inicio para agregar el archivo json (donde se encuentra la cadena de conexión) a la configuración. Ejemplo:

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

        _config = builder.Build();
    }
Vio
fuente
0

Para mí fue porque cambié el Output Typede mi proyecto de inicio de Console Applicationa Class Library.

Revertir a Console Applicationhizo el truco.

Robouste
fuente
0

Tuve este problema en una solución que tiene:

  • un proyecto MVC de .NET Core 2.2
  • un proyecto de .NET Core 3.0 Blazor
  • El contexto de base de datos en un proyecto de biblioteca de clases .NET Standard 2.0

Recibo el mensaje "No se puede crear un objeto ..." cuando el proyecto Blazor está configurado como proyecto de inicio, pero no si el proyecto MVC está configurado como proyecto de inicio.

Eso me desconcierta, porque en la Consola del Administrador de paquetes (que es donde estoy creando la migración) tengo el proyecto predeterminado configurado en una biblioteca de clases C # que realmente contiene el contexto de la base de datos, y también estoy especificando el contexto de la base de datos en mi llamado a agregar migración add-migration MigrationName -context ContextName, por lo que parece extraño que a Visual Studio le importe qué proyecto de inicio está configurado actualmente.

Supongo que la razón es que cuando el proyecto Blazor es el proyecto de inicio, el PMC determina que la versión de .NET es Core 3.0 desde el proyecto de inicio y luego intenta usarla para ejecutar las migraciones en la clase .NET Standard 2.0. biblioteca y golpear un conflicto de algún tipo.

Cualquiera que sea la causa, cambiar el proyecto de inicio al proyecto MVC que apunta a Core 2.2, en lugar del proyecto Blazor, solucionó el problema

tomRedox
fuente
0

Para mí, el problema era que estaba ejecutando los comandos de migración dentro del proyecto equivocado. Ejecutar los comandos dentro del proyecto que contenía Startup.cs en lugar del proyecto que contenía DbContext me permitió superar este problema en particular.

mark_h
fuente
0

En mi caso, la configuración del proyecto StartUp en init ayuda. Puede hacer esto ejecutando

dotnet ef migrations add init -s ../StartUpProjectName
B.Kosmowski
fuente
-4

Tuve el mismo problema. Acabo de cambiar ap.jason a application.jason y solucionó el problema

AliAzra
fuente