2017-08-17 4 views
1

Ich habe ein Problem versucht, IdentityUser Navigationseigenschaften in ASP.NET Core Identity zu ersetzen, die eine breaking change in 2.0 Update war.Aktualisieren der Identität in ASP.NET Core 2.0

Ich schaute auf Add IdentityUser POCO Navigation Properties, aber es gab kaum Erklärung, wie man das tatsächlich macht.

In ApplicationUser.cs Ich habe folgende:

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

Aber wenn ich die Navigationseigenschaft zu verwenden versucht, verwendete es ApplicationUserId statt UserId.

Alle Vorschläge wären willkommen, da dies nicht intuitiv ist, hoffentlich kann das Identitätsteam in der Dokumentation weiter ausführen.

Antwort

3

In meinem Fall habe ich drei abgeleitete Klassen ApplicationUserClaim, ApplicationUserLogin, ApplicationUserRole. Ich mache das, weil ich einige benutzerdefinierte Eigenschaften hinzufügen muss.

Abgeleitete Klassen ohne hinzugefügte Eigenschaften sollten wie folgt aussehen.

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; } 
} 

Auf Ihrem ApplicationUser fügen Sie den folgenden Code ein:

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>(); 

Auf Ihrem ApplicationDbContext den folgenden Code hinzu:

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); 

eine Migration und Sie sind fertig.

+0

Es ist nicht funktioniert für mich. Benötige ich einen anderen Code? –

0

Folgendes OnModelCreating in ApplicationDbContext.cs Hinzufügen fixiert das Problem für mich, die ich von GitHub Problem gefunden How to include Roles in IdentityUser?

builder.Entity<ApplicationUser>().HasMany(p => p.Roles) 
    .WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); 
Verwandte Themen