我正在尝试更新到.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”到“Microsoft.AspNetCore.Identity.IdentityUser”没有隐式引用转换。
ApplicationUser的定义
public class ApplicationUser:IdentityUser
{
public string Name { get; set; }
}
下面的指南定义了这些类及其用法:
随着Core 2.0的改变,我想知道IdentityRole和IdentityUser是如何改变的,所以我不能再继承它们了。
答案 0 :(得分:17)
解决。
保持这些类Microsoft.AspNetCore.Identity.EntityFrameworkCore
的包已更改。要访问这些条款(IdentityUser
和IdentityRole
),必须添加
using Microsoft.AspNetCore.Identity;
有了这个,问题就消失了。
答案 1 :(得分:6)
ICollection<IdentityUserRole<int>> Roles
,ICollection<IdentityUserClaim<int>> Claims
和ICollection<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);
}
答案 2 :(得分:1)
这发生在我身上,但我使用的是Asp.net Core和传统的.NET Framework。您需要添加Nuget包Microsoft.Extensions.Identity
。其中包含类IdentityUser
和IdentityRole
。
我认为你必须添加这个的原因是你的项目没有使用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