Обновление удостоверения в ASP.NET Core 2.0

У меня возникла проблема с попыткой заменить свойства навигации IdentityUser в ASP.NET Core Identity, что было нарушением изменить в обновлении 2.0.

Я просмотрел Добавить свойства навигации POCO IdentityUser, но не было объяснений, как это сделать на самом деле.

В ApplicationUser.cs я добавил следующее:

public virtual ICollection<IdentityUserRole<string>> Roles
    { get; } = List<IdentityUserRole<string>>();

Но когда я попытался использовать это свойство навигации, он использовал ApplicationUserId вместо UserId.

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


person Mark G    schedule 17.08.2017    source источник


Ответы (2)


В моем случае у меня есть три производных класса ApplicationUserClaim, ApplicationUserLogin, ApplicationUserRole. Я делаю это, потому что мне нужно добавить некоторые пользовательские свойства.

Производные классы без добавленных свойств должны выглядеть так.

public class ApplicationUserLogin : IdentityUserLogin<string>
{
    public virtual ApplicationUser ApplicationUser { get; set; }
}


public class ApplicationUserRole: IdentityUserRole<string>
{
    public virtual ApplicationUser ApplicationUser { get; set; }
}


public class ApplicationUserClaim: IdentityUserClaim<string>
{
     public virtual ApplicationUser ApplicationUser { get; set; }
}

В вашем ApplicationUser добавьте следующий код:

public virtual ICollection<ApplicationUserRole> Roles { get; } = new List<ApplicationUserRole>();

public virtual ICollection<ApplicationUserClaim> Claims { get; } = new List<ApplicationUserClaim>();

public virtual ICollection<ApplicationUserLogin> Logins { get; } = new List<ApplicationUserLogin>();

В свой ApplicationDbContext добавьте следующий код:

modelBuilder.Entity<ApplicationUserClaim>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Claims).HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<ApplicationUserRole>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Roles).HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<ApplicationUserLogin>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Logins).HasForeignKey(pt => pt.UserId);

Сделайте миграцию, и все готово.

person amustelier    schedule 17.08.2017

Добавление следующего в OnModelCreating в ApplicationDbContext.cs устранило для меня проблему, которую я обнаружил в выпуске GitHub Как включить роли в IdentityUser?

builder.Entity<ApplicationUser>().HasMany(p => p.Roles)
    .WithOne().HasForeignKey(ur => ur.UserId).IsRequired();
person Mark G    schedule 17.08.2017