AspNetIdentity
AspNetIdentity copied to clipboard
Using navigation properties does not allow to use some methods from UserManager or RoleManager
I went through a guide describing how to configure navigation properties for the identity package and encounter a problem with relations between defined navigation properties, causing problem with eg. assinging role to user.
Steps to reproduce:
- Configure database context with the navigation properties eg.
UserRoles
link to source. - Add application user using
UserManager<ApplicationUser>
with methodCreateAsync
. - Add role using
RoleManager<ApplicationRole>
with methodCreateAsync
. - Confirm that user and role are added to database.
- Assign role to the user using
UserManager<ApplicationUser>
with methodAddToRoleAsync
. - Observe that there is new entry in
UserRole
table which is correct, but with incorrectUserId
andRoleId
, which does not exist and was generated with running previous step.
Users:
UserRoles:
Roles:
I checked assigning role to user directly using ApplicationDbContext
, which was successful and no ghost entries were added to Users
and Roles
tables:
context.UserRoles.Add(new ApplicationUserRole
{
RoleId = adminRole.Id,
Role = adminRole,
UserId = admin.Id,
User = admin,
});
The same situation happens when using other navigation properties like IdentityClaims
and etc.
Issue reproduced with:
- PostgreSQL 16
- .NET 6
- Microsoft.AspNetCore.Identity.EntityFrameworkCore 6.0.24