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 ApplicationU
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);
}
Migrating Authentication and Identity to ASP.NET Core 2.0
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.
You need to install Microsoft.AspNetCore.Identity.EntityFramework package
Install-Package Microsoft.AspNetCore.Identity.EntityFramework
or
dotnet add package Microsoft.AspNetCore.Identity.EntityFramework
For me it got solved by installing package:
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.