Невозможно создать объект типа ApplicationDbContext, который наследуется от IdentityDBContext после перехода на 3.0 - PullRequest
0 голосов
/ 19 октября 2019

Когда я пытаюсь добавить миграцию после миграции в .net core 3.0 и ef core 3.0 , я получаю сообщение об ошибке: Невозможно создать объект типа 'ApplicationDbContext'.

enter image description here

Зависимости следующие:

enter image description here

Мой код выглядит следующим образом:

ApplicationDbContext.cs

  public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, ILocalizationDbContext
{
    private readonly IServiceProvider _serviceProvider;

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }        

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
        IServiceProvider serviceProvider)
        : base(options)
    {
        _serviceProvider = serviceProvider;
    } 
   }

Startup.cs

 public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"), 
                b => b.MigrationsAssembly("Infrastructure")), 
            ServiceLifetime.Transient);

        services.AddDefaultIdentity<ApplicationUser>()
            .AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();
    }

Program.cs

 public class Program
{
    public static void Main(string[] args)
    {
        var host = Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webHostBuilder =>
                {
                    webHostBuilder
          .UseContentRoot(Directory.GetCurrentDirectory())
          .UseIISIntegration()
          .UseStartup<Startup>();
                })
                .Build();

        host.Run();
    }
}

1 Ответ

0 голосов
/ 21 октября 2019

Как видно из ссылки в сообщении об ошибке, обновите класс вашей программы так, чтобы он выглядел следующим образом.

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args)
            .Build();

        host.Run();
    }

    // EF Core uses this method at design time to access the DbContext
    public static IHostBuilder CreateHostBuilder(string[] args)
        => Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webHostBuilder =>
                {
                    webHostBuilder
                       .UseContentRoot(Directory.GetCurrentDirectory())
                       .UseIISIntegration()
                       .UseStartup<Startup>();
                });
}
...