С 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>();
});
Однако когда Я запускаю команду Add-Migration AddContactUser -StartupProject MyWebApi
в консоли диспетчера пакетов и получаю следующую ошибку:
Невозможно создать объект типа AuthDbContext. Для различных шаблонов, поддерживаемых во время разработки, см. https://go.microsoft.com/fwlink/?linkid=851728
На основе информации по этой ссылке инструмент должен найти мой метод Program.CreateHostBuilder
, но не .
Почему?
Начальный проект - это проект docker -compose с использованием PostgreSQL. Я подчеркиваю тот факт, что все раньше хорошо работало со встроенным классом IdentityUser
, но я хотел его настроить, поэтому я создал ContactUser.
Если я создам конструктор без параметров для AuthDbContext
и переопределю OnConfiguring с записью строки подключения, он работает нормально, но я не хочу выбирать этот вариант. Я также могу создать реализацию IDesignTimeDbContextFactory<T>
, и я думаю, это тоже поможет, но я хочу понять, что простое решение по умолчанию не работает и не может найти конфигурацию, которая хорошо работает во время выполнения.
Изменить: я обнаружил, что это случай с другим контекстом DbContext, который не имеет ничего общего с ASP. NET Core Identity. Это должно помочь в решении проблемы.