I'm trying to finish updating to .NET Core 2.0 but a couple of errors pop up:
The problem:
I have two classes, ApplicationRole and ApplicationUser which inherit some properties from IdentityRole and IdentityUser.
With the update to Core 2.0 I'm getting the following errors, claiming that IdentityRole and IdentityUser could not be found.
However, the package Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0
is installed in the new version of .NET Core
About IdentityRole:
Message 1:
The type or namespace name 'IdentityRole' could not be found (is it missing a using directive or an assembly reference?)
Message 2:
The 'Application.Models.ApplicationRole' type can not be used as a parameter of type 'TRole' in the generic type or method 'IdentityDbContext '. There is no implicit reference conversion from 'Application.Models.ApplicationRole' to 'Microsoft.AspNetCore.Identity.IdentityRole '.
Definition of ApplicationRole:
public class ApplicationRole:IdentityRole
{
public string Description { get; set; }
public DateTime CreatedDated { get; set; }
public string IPAddress { get; set; }
}
About IdentityUser:
Message 1:
The type or namespace name 'IdentityUser' could not be found (is it missing a using directive or an assembly reference?)
Message 2:
The 'Application.Models.ApplicationUser' type can not be used as a parameter of type 'TUser' in the generic type or method 'IdentityDbContext '. There is no implicit reference conversion from 'Application.Models.ApplicationUser' to 'Microsoft.AspNetCore.Identity.IdentityUser '.
Definition of ApplicationUser
public class ApplicationUser:IdentityUser
{
public string Name { get; set; }
}
The guide followed to define this classes and their use are here:
With the change to Core 2.0 I wonder how IdentityRole and IdentityUser changed so I can no longer inherit from them.
Solved.
The package that was keeping those classes Microsoft.AspNetCore.Identity.EntityFrameworkCore
changed. To access those clases ( IdentityUser
and IdentityRole
) one must add
using Microsoft.AspNetCore.Identity;
With this, the problem is gone.
ICollection<IdentityUserRole<int>> Roles
, ICollection<IdentityUserClaim<int>> Claims
and ICollection<IdentityUserLogin<int>> Logins
navigation properties have been removed from Microsoft.AspNetCore.Identity.IdentityUser
.
You should define them manually
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>>();
}
To prevent duplicate foreign keys when running EF Core Migrations, add the following to your IdentityDbContext
class' OnModelCreating
method
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
This happen to me but I was using Asp.net Core with traditional .NET Framework. You need to add the Nuget package Microsoft.Extensions.Identity
. That contains the classes IdentityUser
and IdentityRole
.
I think the reason you have to add this is when your project isn't using the Microsoft.AspNetCore.All package.
You need to install Microsoft.AspNetCore.Identity.EntityFramework package
Install-Package Microsoft.AspNetCore.Identity.EntityFramework
or
dotnet add package Microsoft.AspNetCore.Identity.EntityFramework
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.