使用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无关。那应该可以解决这个问题。