我正在尝试更新到.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"到"Microsoft.AspNetCore.Identity.IdentityUser"的隐式引用转换.
ApplicationUser的定义
public class ApplicationUser:IdentityUser
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
下面的指南定义了这些类及其用法如下:
随着Core 2.0的改变,我想知道IdentityRole和IdentityUser是如何改变的,所以我不能再继承它们了.
Lui*_*Flo 19
解决了.
保持这些类Microsoft.AspNetCore.Identity.EntityFrameworkCore更改的包.要访问那些(IdentityUser和IdentityRole),必须添加
using Microsoft.AspNetCore.Identity;
Run Code Online (Sandbox Code Playgroud)
有了这个,问题就消失了.
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>>();
}
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)
| 归档时间: |
|
| 查看次数: |
9255 次 |
| 最近记录: |