.NET Core 2を使用することにしましたが、問題が発生しています。Microsoftのドキュメントによると、ナビゲーションプロパティは基本クラスに存在しなくなったのでIdentityUser
、元に戻してください。
ビューモデルで各ユーザーがどのような役割を持っているかを参照できますが、これをアプリケーションユーザークラスに入れると次のようになります。
public virtual ICollection<IdentityUserRole<int>> Roles { get; } =
new List<IdentityUserRole<int>>();
public virtual ICollection<IdentityUserClaim<int>> Claims { get; } =
new List<IdentityUserClaim<int>>();
public virtual ICollection<IdentityUserLogin<int>> Logins { get; } =
new List<IdentityUserLogin<int>>();
これをモデルビルダーに追加します。
builder.Entity<ApplicationUser>()
.HasMany(e => e.Claims)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<ApplicationUser>()
.HasMany(e => e.Logins)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<ApplicationUser>()
.HasMany(e => e.Roles)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
エラーが発生します The entity type 'IdentityUserLogin<int>' requires a primary key to be defined.
関連するMicrosoftのドキュメントはこちらです:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x
User.Role
ビューに表示するための値を取得するにはどうすればよいですか?
ApplicationUserクラスがGenericsを使用せずにIdentityUserを拡張して主キーのタイプを定義する場合、デフォルトのタイプである文字列を使用します。
その場合、ナビゲーションエンティティのキーのタイプをintからstringに変更する必要があります。
ApplicationUserクラスは次のようになります
public class ApplicationUser : IdentityUser
{
public virtual ICollection<IdentityUserRole<string>> Roles { get; } = new List<IdentityUserRole<string>>();
public virtual ICollection<IdentityUserClaim<string>> Claims { get; } = new List<IdentityUserClaim<string>>();
public virtual ICollection<IdentityUserLogin<string>> Logins { get; } = new List<IdentityUserLogin<string>>();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加