首页 > 解决方案 > 迁移到 3.0 后无法创建继承自 IdentityDBContext 的 ApplicationDbContext 类型的对象

问题描述

当我在迁移到.net core 3.0 和 ef core 3.0后尝试添加迁移时,出现错误:无法创建“ApplicationDbContext”类型的对象。

在此处输入图像描述

依赖关系如下:

在此处输入图像描述

我的代码如下:

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

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

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

标签: asp.net-coreentity-framework-coreef-core-3.0

解决方案


正如错误消息中的链接所述,将您的 Program 类更新为如下所示。

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

推荐阅读