Миграция надстройки Asp.Net Core 2.1 не использует свойства в классе, наследуемом от IdentityUser.

Я работаю над веб-приложением ASP.Net Core 2.1.1 в VS2017 v15.8.2, используя шаблон веб-приложения с отдельными учетными записями пользователей.

Я хочу добавить дополнительные свойства к IdentityUser, поэтому я создал класс ApplicationUser, наследующий от IdentityUser. Я применил соответствующие обновления к файлам startup.cs и _loginPartial.cshtml. Все компилируется, но когда я запускаю Add-Migration, он не выбирает свойства моего ApplicationUser класса. У меня есть класс миграции, но у методов вверх и вниз нет свойств.

У меня только один проект, поэтому выбор проекта по умолчанию не является проблемой в консоли диспетчера пакетов.

Вот мой класс ApplicationUser

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zipcode { get; set; }
    public int CompanyId { get; set; }
}

Вот мой DBContext

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

Вот служба в Startup.cs, ConfigureService

        services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.
        GetConnectionString("AccountDbConnectionString")));

        services.AddDefaultIdentity<ApplicationUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

Вот перенос надстройки в консоли диспетчера пакетов

Add-Migration -c ApplicationDbContext V1.00.01 

Вот результат миграции

public partial class V10001 : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {

    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {

    }
}

Класс ApplicationUser находится в папке Models вне корня проекта.

IdentityUser был проанализирован для первоначальной миграции шаблона веб-приложения Asp.Net Core, когда я впервые создал проект, и когда я запустил команду update-database, он отлично создал все таблицы AspNetUserxxx и AspNetRolexxx в базе данных.

Но я не могу понять, почему EF Migrations не видит класс ApplicationUser, чтобы добавить новые свойства в класс миграции.

Когда я ищу примеры в Интернете, похоже, что я делаю все правильно, чтобы расширить свойства IdentyUser.

Что мне не хватает?

РЕДАКТИРОВАТЬ 1: Я попробовал решение в этом сообщении SO, но это не имело никакого значения.


person whiskytangofoxtrot    schedule 31.08.2018    source источник


Ответы (3)


измените свой ApplicationDbContext, как показано ниже:

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

}

вот скриншот, который работает:

введите описание изображения здесь

[Обновление]: Я обнаружил, что ответ @vivek nuna тоже работает. Вы можете выбирать, как хотите.

[Обновить]: если вы столкнетесь с исключением, например:

An unhandled exception occurred while processing the request.

InvalidOperationException: не была зарегистрирована служба для типа «Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser]». Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (поставщик IServiceProvider, тип serviceType)

не забудьте обновить _LoginPartial.cshtml, в котором SignInManager и UserManager ссылаются на IdentityUser, т.е. измените код с:

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

to

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
person itminus    schedule 31.08.2018

Вам нужно добавить класс ApplicationUser в DBContext.

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

    public virtual DbSet<ApplicationUser> ApplicationUser { get; set; }
}

Затем Добавить миграцию, а затем Обновить базу данных.

person vivek nuna    schedule 31.08.2018

Поскольку я использую пакет удостоверений ASP.NET Core, все страницы, связанные с входом в систему и аутентификацией, например _LoginPartial, должны быть изменены с:

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

To:

@using Microsoft.AspNetCore.Identity
inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

Также важно изменить ApplicatiuonDbContext:

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

И тогда должна быть выполнена миграция базы данных.

person Sergio Di Fiore    schedule 21.07.2019