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

时间:2017-08-23 04:05:54

标签: c# asp.net .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; }
}

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

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

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

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

5 个答案:

答案 0 :(得分:17)

解决。

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

using Microsoft.AspNetCore.Identity;

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

答案 1 :(得分:6)

ICollection<IdentityUserRole<int>> RolesICollection<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>>();
}

要在运行EF Core Migrations时防止重复的外键,请将以下内容添加到IdentityDbContext类&#39; 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);
}

Migrating Authentication and Identity to ASP.NET Core 2.0

答案 2 :(得分:1)

这发生在我身上,但我使用的是Asp.net Core和传统的.NET Framework。您需要添加Nuget包Microsoft.Extensions.Identity。其中包含类IdentityUserIdentityRole

我认为你必须添加这个的原因是你的项目没有使用Microsoft.AspNetCore.All软件包。

答案 3 :(得分:1)

对我来说,它是通过安装软件包来解决的:

Microsoft.Extensions.Identity.Stores

答案 4 :(得分:0)

您需要安装Microsoft.AspNetCore.Identity.EntityFramework软件包

Install-Package Microsoft.AspNetCore.Identity.EntityFramework

dotnet add package Microsoft.AspNetCore.Identity.EntityFramework