2017-08-17 47 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(); 
相關問題