Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t继承自ASP.NET Core 2.0中的IdentityUser和IdentityRole_C#_Asp.net_.net - Fatal编程技术网

C# Can';t继承自ASP.NET Core 2.0中的IdentityUser和IdentityRole

C# Can';t继承自ASP.NET Core 2.0中的IdentityUser和IdentityRole,c#,asp.net,.net,C#,Asp.net,.net,我正在尝试完成对.NET Core 2.0的更新,但出现了几个错误: 问题: 我有两个类,ApplicationRole和ApplicationUser,它们从IdentityRole和IdentityUser继承了一些属性 更新到Core2.0后,我发现以下错误,声称找不到IdentityRole和IdentityUser 但是,新版本的.NET Core中安装了包Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0 关于识别码: 信息1:

我正在尝试完成对.NET Core 2.0的更新,但出现了几个错误:

问题:

我有两个类,ApplicationRole和ApplicationUser,它们从IdentityRole和IdentityUser继承了一些属性

更新到Core2.0后,我发现以下错误,声称找不到IdentityRole和IdentityUser

但是,新版本的.NET Core中安装了包Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0

关于识别码:

信息1:

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

信息2:

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

应用程序角色的定义:

关于标识用户:

信息1:

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

信息2:

“Application.Models.ApplicationUser”类型不能用作泛型类型或方法“IdentityDbContext”中“TUser”类型的参数。没有从“Application.Models.ApplicationUser”到“Microsoft.AspNetCore.Identity.IdentityUser”的隐式引用转换

应用程序用户的定义

以下是定义此类及其使用的指南:

随着对Core 2.0的更改,我想知道IdentityRole和IdentityUser是如何更改的,这样我就不能再继承它们了。

解决了

保存这些类的包
Microsoft.AspNetCore.Identity.EntityFrameworkCore
已更改。要访问这些类别(
IdentityUser
IdentityRole
),必须添加

using Microsoft.AspNetCore.Identity;
这样,问题就消失了。

ICollection角色
ICollection声明
ICollection登录
导航属性已从
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>>();
}

这种情况发生在我身上,但我在传统的.net框架中使用Asp.net内核。您需要添加Nuget包
Microsoft.Extensions.Identity
。它包含类
IdentityUser
IdentityRole


我认为您必须添加此项的原因是您的项目未使用Microsoft.AspNetCore.All软件包。

对我来说,通过安装软件包解决了此问题:

Microsoft.Extensions.Identity.Stores

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

Install-Package Microsoft.AspNetCore.Identity.EntityFramework


您知道如何在.Net Core 2.0上使用角色了吗?如果是的话,你能给我一个建议吗example@YTerle回顾新的答案。如果有人来自未来的3.1版本,这肯定是一个比你需要安装。
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);
}
Microsoft.Extensions.Identity.Stores
Install-Package Microsoft.AspNetCore.Identity.EntityFramework
dotnet add package Microsoft.AspNetCore.Identity.EntityFramework