我决定使用 .NET Core 2,但我遇到了问题。微软文档说导航属性不再存在于基类 IdentityUser 中,我希望它们回来。

我可以引用每个用户在我的 View 模型中的角色,但是当我把它放到我的应用程序用户类中时:

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 的值以在我的 View 中显示?

最佳答案

如果您的 ApplicationUser 类扩展 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>>();
}

关于c# - ASP.NET CORE 2 IdentityUser POCO 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47249196/

10-15 19:20