无法从ASP.NET Core 2.0中的IdentityUser和IdentityRole继承

Lui*_*Flo 14 .net c# asp.net

我正在尝试更新到.NET Core 2.0,但会弹出几个错误:

问题:

我有两个类,ApplicationRole和ApplicationUser,它继承IdentityRole和IdentityUser的一些属性.

随着Core 2.0的更新,我收到以下错误,声称无法找到IdentityRole和IdentityUser.

但是,该软件包Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0安装在新版本的.NET Core中

关于IdentityRole:

消息1:

找不到类型或命名空间名称'IdentityRole'(是否缺少using指令或程序集引用?)

消息2:

'Application.Models.ApplicationRole'类型不能用作泛型类型或方法'IdentityDbContext'中'TRole'类型的参数.没有从"Application.Models.ApplicationRole"到"Microsoft.AspNetCore.Identity.IdentityRole"的隐式引用转换.

ApplicationRole的定义:

public class ApplicationRole:IdentityRole
{
    public string Description { get; set; }
    public DateTime CreatedDated { get; set; }
    public string IPAddress { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

关于IdentityUser:

消息1:

找不到类型或命名空间名称'IdentityUser'(是否缺少using指令或程序集引用?)

消息2:

'Application.Models.ApplicationUser'类型不能用作泛型类型或方法'IdentityDbContext'中'TUser'类型的参数.没有从"Application.Models.ApplicationUser"到"M​​icrosoft.AspNetCore.Identity.IdentityUser"的隐式引用转换.

ApplicationUser的定义

public class ApplicationUser:IdentityUser
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

下面的指南定义了这些类及其用法如下:

http://www.c-sharpcorner.com/article/asp-net-core-mvc-authentication-and-role-based-authorization-with-asp-net-core/

随着Core 2.0的改变,我想知道IdentityRole和IdentityUser是如何改变的,所以我不能再继承它们了.

Lui*_*Flo 19

解决了.

保持这些类Microsoft.AspNetCore.Identity.EntityFrameworkCore更改的包.要访问那些(IdentityUserIdentityRole),必须添加

using Microsoft.AspNetCore.Identity;
Run Code Online (Sandbox Code Playgroud)

有了这个,问题就消失了.


Ale*_*ias 7

对我来说,它通过安装包解决了:

Microsoft.Extensions.Identity.Stores
Run Code Online (Sandbox Code Playgroud)


tch*_*dze 6

ICollection<IdentityUserRole<int>> Roles,ICollection<IdentityUserClaim<int>> ClaimsICollection<IdentityUserLogin<int>> Logins导航属性已经从除去Microsoft.AspNetCore.Identity.IdentityUser.

您应该手动定义它们

public class MyUser : 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>>();
}
Run Code Online (Sandbox Code Playgroud)

要在运行EF Core Migrations时防止重复的外键,请将以下内容添加到IdentityDbContext类的OnModelCreating方法中

protected override void OnModelCreating(ModelBuilder builder)
{
  base.OnModelCreating(builder);

builder.Entity<MyUser>()
    .HasMany(e => e.Claims)
    .WithOne()
    .HasForeignKey(e => e.UserId)
    .IsRequired()
    .OnDelete(DeleteBehavior.Cascade);

builder.Entity<MyUser>()
    .HasMany(e => e.Logins)
    .WithOne()
    .HasForeignKey(e => e.UserId)
    .IsRequired()
    .OnDelete(DeleteBehavior.Cascade);

builder.Entity<MyUser>()
    .HasMany(e => e.Roles)
    .WithOne()
    .HasForeignKey(e => e.UserId)
    .IsRequired()
    .OnDelete(DeleteBehavior.Cascade);
}
Run Code Online (Sandbox Code Playgroud)

将身份验证和身份迁移到ASP.NET Core 2.0