I followed the guide here : reference
When I try to use include Roles on my user's collection only one of them actually return roles. Other user doesn't have any roles collection despite the fact that there are in the database. It feels like the roles fill out only for one user. If I change the OrderBy condition well it will be another user that will have Roles.
I really don't know what could create this behavior.
Here is my code to permit roles navigation.
In my user context :
builder.Entity<ESUserIdentity>()
.HasMany(e => e.Roles)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<IdentityUserRole<Guid>>(i =>
{
i.ToTable("AspNetUserRoles");
i.HasKey(x => new { x.RoleId, x.UserId });
});
In my user identity :
public class ESUserIdentity : IdentityUser<Guid>
public virtual ICollection<IdentityUserRole<Guid>> Roles { get; } = new List<IdentityUserRole<Guid>>();
In my services :
services.AddIdentity<ESUserIdentity, IdentityRole<Guid>>()
.AddEntityFrameworkStores<ESUsersContext>()
.AddDefaultTokenProviders();
My query used :
identities = await _dbUsers.Users
.Include(r => r.Roles)
.OrderBy(order)
.Where(q =>
(q.FullName != null && q.FullName.ContainsValue(query.search) ||
q.UserName != null && q.UserName.ContainsValue(query.search) ||
q.Email != null && q.Email.ContainsValue(query.search) ||
query.search == null) &&
q.Companyid == cieId &&
q.Deleted == false)
.Skip((query.limit * (query.page - 1))).Take(query.limit)
.AsNoTracking().ToArrayAsync();
(Note that I have two users in my database)
Here is a screenshot of my problem for proof :
SQL Generate from this method IQueryableExtensions -> https://github.com/aspnet/EntityFrameworkCore/issues/6482 Seem not to convert all :
SELECT [r].[Id], [r].[AccessFailedCount], [r].[Companyid], [r].[ConcurrencyStamp], [r].[Deleted], [r].[DeletedDate], [r].[Email], [r].[EmailConfirmed], [r].[FullName], [r].[HasSeenTutorial], [r].[Language], [r].[LockoutEnabled], [r].[LockoutEnd], [r].[NormalizedEmail], [r].[NormalizedUserName], [r].[PasswordHash], [r].[PhoneNumber], [r].[PhoneNumberConfirmed], [r].[SecurityStamp], [r].[Status], [r].[TimezoneId], [r].[TwoFactorEnabled], [r].[UserName]
FROM [AspNetUsers] AS [r]
WHERE [r].[Deleted] = 0
ORDER BY [r].[Id] DESC