Я следовал руководству здесь: ссылка
Когда я пытаюсь использовать включение ролей в коллекцию моего пользователя, только одна из них фактически возвращает роли.Другой пользователь не имеет никакой коллекции ролей, несмотря на то, что есть в базе данных.Такое ощущение, что роли заполнены только для одного пользователя.Если я хорошо изменю условие OrderBy, это будет другой пользователь, у которого будут Роли.
Я действительно не знаю, что может создать такое поведение.
Вот мой код, разрешающий навигацию по ролям.
В моем контексте пользователя:
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 });
});
В моем удостоверении пользователя:
public class ESUserIdentity : IdentityUser<Guid>
public virtual ICollection<IdentityUserRole<Guid>> Roles { get; } = new List<IdentityUserRole<Guid>>();
В моих службах:
services.AddIdentity<ESUserIdentity, IdentityRole<Guid>>()
.AddEntityFrameworkStores<ESUsersContext>()
.AddDefaultTokenProviders();
Мой запрос используется:
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();
(обратите внимание, что в моей базе данных есть два пользователя)
Вот скриншот моей проблемы для доказательства:
SQL Генерировать из этого метода IQueryableExtensions -> https://github.com/aspnet/EntityFrameworkCore/issues/6482 Кажется, не для преобразования всех:
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