Asp.Net Core 2.1 add-миграция не подбирает свойства в классе, которые наследуются от IdentityUser - PullRequest
0 голосов
/ 31 августа 2018

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

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

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

Вот мой класс 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, когда я впервые создал проект и когда я выполнил команду update-database, он прекрасно создал все таблицы AspNetUserxxx и AspNetRolexxx в базе данных ,

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

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

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

РЕДАКТИРОВАТЬ 1: я пробовал решение в этом посте, но это не имело никакого значения. Entity Framework Core 2.0 add-миграция ничего не генерирует

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

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

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

}

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

enter image description here

[Обновление]: Я просто обнаружил, что ответ @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

до

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
0 голосов
/ 21 июля 2019

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

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

Кому:

@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)
        { }

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

0 голосов
/ 31 августа 2018

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

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

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

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

...