运行添加迁移时无法创建类型为“ AuthDbContext”的对象

时间:2020-05-26 18:51:38

标签: c# asp.net-core entity-framework-core asp.net-core-identity

使用ASP.NET Core 3.1,

我试图像这样对IdentityUser使用自定义:

public class ContactUser : IdentityUser
{
    public string Name { get; set; }
}

我的DbContext是

public class AuthDbContext : IdentityDbContext<ContactUser>
{
    public AuthDbContext(DbContextOptions<AuthDbContext> options)
        : base(options)
    { }
}

Startup.ConfigureServices(IServiceCollection services)方法中注册如下:

services.AddDbContext<AuthDbContext>(options =>
    options.UseNpgsql(Configuration.GetConnectionString("AuthDatabase")));

services.AddIdentity<ContactUser, IdentityRole>()
    .AddEntityFrameworkStores<AuthDbContext>();

我的Program.cs是这样的(public class Program):

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

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

但是,当我在Package Manager控制台中运行Add-Migration AddContactUser -StartupProject MyWebApi命令时,出现以下错误:

无法创建类型为'AuthDbContext'的对象。对于不同 设计时支持的模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728

根据该链接上的信息,该工具应该找到我的Program.CreateHostBuilder方法,但找不到。

为什么?

启动项目是一个使用PostgreSQL的docker-compose项目。 我强调一个事实,所有的东西过去都可以与内置IdentityUser类一起很好地工作,但是我想对其进行自定义,因此我创建了ContactUser。

如果我为AuthDbContext创建一个无参数的构造函数,并通过烧写连接字符串来覆盖OnConfiguring,则它可以正常工作,但是我不想选择该选项。 我可能还会创建一个IDesignTimeDbContextFactory<T>实现,但我想这也会有所帮助,但是我想了解默认的简单解决方案不起作用,并且无法找到运行时很好的配置。

编辑:我发现使用不同的DbContext就是这种情况,而DbContext与ASP.NET Core Identity无关。那应该可以解决这个问题。

0 个答案:

没有答案