2017-08-17 1 views
1

2.0アップデートのbreaking changeだったASP.NET Core IdentityのIdentityUserナビゲーションプロパティの置き換えに問題があります。ASP.NETコア2.0のIDを更新します。

私はAdd IdentityUser POCO Navigation Propertiesを見ましたが、実際にこれを行う方法についてはほとんど説明がありませんでした。私は次のように追加ApplicationUser.csで

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

しかし、私はそれがApplicationUserId代わりのユーザーIDを使用しているナビゲーションプロパティを使用しようとしました。

これは直感的ではないので、歓迎したいと思います。アイデンティティチームがドキュメントで詳しく説明してくれることを願っています。

答えて

3

私のケースでは、3つの派生クラスApplicationUserClaim、ApplicationUserLogin、ApplicationUserRoleがあります。カスタムプロパティを追加する必要があるため、これを行います。

プロパティを追加しない派生クラスは、次のようになります。次のコードを追加するには、ApplicationDbContextで

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

:あなたのApplicationUserオン

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

は、次のコードを追加し

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

は、移行を作成し、設定は完了です。 ApplicationDbContext.csにOnModelCreatingに次を追加する

+0

から見つかった私のために問題を修正しました。私はいくつかの他のコードを広告する必要がありますか? –

0

は、私はそれが私の作品ではないのGitHubの問題How to include Roles in IdentityUser?

builder.Entity<ApplicationUser>().HasMany(p => p.Roles) 
    .WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); 
関連する問題