2017-08-17 49 views
1

我在试图替换ASP.NET Core Identity中的IdentityUser导航属性时出现问题,它是2.0更新中的breaking change更新ASP.NET Core 2.0中的标识

我看着Add IdentityUser POCO Navigation Properties,但是对于如何实际做到这一点还缺乏足够的解释。

在ApplicationUser.cs我增加了以下内容:

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

但是,当我试图使用导航属性它使用ApplicationUserId代替用户ID。

任何建议都会受到欢迎,因为这不直观,希望身份团队可以在文档中进一步详细说明。

回答

3

在我的情况下,我有三个派生类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); 

使迁移和你做。

+0

这不是对我的作品的问题。我是否需要广告​​一些其他代码? –

0

加入以下OnModelCreating在ApplicationDbContext.cs固定对我来说这是我从GitHub上的问题的发现How to include Roles in IdentityUser?

builder.Entity<ApplicationUser>().HasMany(p => p.Roles) 
    .WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); 
相关问题