Identity module EF core async fix.

pull/6809/head
Halil İbrahim Kalkan 5 years ago
parent cfecb1f8d9
commit 420dfbe8b4

@ -34,7 +34,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = GetListQuery( cancellationToken = GetCancellationToken(cancellationToken);
var query = await GetListQueryAsync(
startTime, startTime,
endTime, endTime,
applicationName, applicationName,
@ -43,12 +45,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
userId, userId,
userName, userName,
clientId, clientId,
correlationId correlationId,
cancellationToken
); );
return await query.OrderBy(sorting ?? nameof(IdentitySecurityLog.CreationTime) + " desc") return await query.OrderBy(sorting ?? nameof(IdentitySecurityLog.CreationTime) + " desc")
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(cancellationToken);
} }
public async Task<long> GetCountAsync( public async Task<long> GetCountAsync(
@ -63,7 +66,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
string correlationId = null, string correlationId = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = GetListQuery( cancellationToken = GetCancellationToken(cancellationToken);
var query = await GetListQueryAsync(
startTime, startTime,
endTime, endTime,
applicationName, applicationName,
@ -72,18 +77,21 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
userId, userId,
userName, userName,
clientId, clientId,
correlationId correlationId,
cancellationToken
); );
return await query.LongCountAsync(GetCancellationToken(cancellationToken)); return await query.LongCountAsync(cancellationToken);
} }
public async Task<IdentitySecurityLog> GetByUserIdAsync(Guid id, Guid userId, bool includeDetails = false, CancellationToken cancellationToken = default) public async Task<IdentitySecurityLog> GetByUserIdAsync(Guid id, Guid userId, bool includeDetails = false, CancellationToken cancellationToken = default)
{ {
return await DbSet.OrderBy(x => x.Id).FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, GetCancellationToken(cancellationToken)); return await (await GetDbSetAsync())
.OrderBy(x => x.Id)
.FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, GetCancellationToken(cancellationToken));
} }
protected virtual IQueryable<IdentitySecurityLog> GetListQuery( protected virtual async Task<IQueryable<IdentitySecurityLog>> GetListQueryAsync(
DateTime? startTime = null, DateTime? startTime = null,
DateTime? endTime = null, DateTime? endTime = null,
string applicationName = null, string applicationName = null,
@ -92,9 +100,10 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
Guid? userId = null, Guid? userId = null,
string userName = null, string userName = null,
string clientId = null, string clientId = null,
string correlationId = null) string correlationId = null,
CancellationToken cancellationToken = default)
{ {
return DbSet.AsNoTracking() return (await GetDbSetAsync()).AsNoTracking()
.WhereIf(startTime.HasValue, securityLog => securityLog.CreationTime >= startTime.Value) .WhereIf(startTime.HasValue, securityLog => securityLog.CreationTime >= startTime.Value)
.WhereIf(endTime.HasValue, securityLog => securityLog.CreationTime < endTime.Value.AddDays(1).Date) .WhereIf(endTime.HasValue, securityLog => securityLog.CreationTime < endTime.Value.AddDays(1).Date)
.WhereIf(!applicationName.IsNullOrWhiteSpace(), securityLog => securityLog.ApplicationName == applicationName) .WhereIf(!applicationName.IsNullOrWhiteSpace(), securityLog => securityLog.ApplicationName == applicationName)

@ -22,7 +22,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
Guid? ignoredId = null, Guid? ignoredId = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.WhereIf(ignoredId != null, ct => ct.Id != ignoredId) .WhereIf(ignoredId != null, ct => ct.Id != ignoredId)
.CountAsync(ct => ct.Name == name, GetCancellationToken(cancellationToken)) > 0; .CountAsync(ct => ct.Name == name, GetCancellationToken(cancellationToken)) > 0;
} }
@ -34,7 +34,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
string filter, string filter,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var identityClaimTypes = await DbSet var identityClaimTypes = await (await GetDbSetAsync())
.WhereIf( .WhereIf(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
u => u =>
@ -51,7 +51,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
string filter = null, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.WhereIf( .WhereIf(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
u => u =>
@ -59,4 +59,4 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
).LongCountAsync(GetCancellationToken(cancellationToken)); ).LongCountAsync(GetCancellationToken(cancellationToken));
} }
} }
} }

@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -20,7 +19,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public async Task<IdentityLinkUser> FindAsync(IdentityLinkUserInfo sourceLinkUserInfo, IdentityLinkUserInfo targetLinkUserInfo, CancellationToken cancellationToken = default) public async Task<IdentityLinkUser> FindAsync(IdentityLinkUserInfo sourceLinkUserInfo, IdentityLinkUserInfo targetLinkUserInfo, CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.OrderBy(x => x.Id).FirstOrDefaultAsync(x => .OrderBy(x => x.Id).FirstOrDefaultAsync(x =>
x.SourceUserId == sourceLinkUserInfo.UserId && x.SourceTenantId == sourceLinkUserInfo.TenantId && x.SourceUserId == sourceLinkUserInfo.UserId && x.SourceTenantId == sourceLinkUserInfo.TenantId &&
x.TargetUserId == targetLinkUserInfo.UserId && x.TargetTenantId == targetLinkUserInfo.TenantId || x.TargetUserId == targetLinkUserInfo.UserId && x.TargetTenantId == targetLinkUserInfo.TenantId ||
@ -31,7 +30,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public async Task<List<IdentityLinkUser>> GetListAsync(IdentityLinkUserInfo linkUserInfo, CancellationToken cancellationToken = default) public async Task<List<IdentityLinkUser>> GetListAsync(IdentityLinkUserInfo linkUserInfo, CancellationToken cancellationToken = default)
{ {
return await DbSet.Where(x => return await (await GetDbSetAsync())
.Where(x =>
x.SourceUserId == linkUserInfo.UserId && x.SourceTenantId == linkUserInfo.TenantId || x.SourceUserId == linkUserInfo.UserId && x.SourceTenantId == linkUserInfo.TenantId ||
x.TargetUserId == linkUserInfo.UserId && x.TargetTenantId == linkUserInfo.TenantId) x.TargetUserId == linkUserInfo.UserId && x.TargetTenantId == linkUserInfo.TenantId)
.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken));

@ -22,7 +22,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.OrderBy(x => x.Id) .OrderBy(x => x.Id)
.FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken));
@ -36,7 +36,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.WhereIf(!filter.IsNullOrWhiteSpace(), .WhereIf(!filter.IsNullOrWhiteSpace(),
x => x.Name.Contains(filter) || x => x.Name.Contains(filter) ||
@ -50,7 +50,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
IEnumerable<Guid> ids, IEnumerable<Guid> ids,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.Where(t => ids.Contains(t.Id)) .Where(t => ids.Contains(t.Id))
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -58,23 +58,32 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public virtual async Task<List<IdentityRole>> GetDefaultOnesAsync( public virtual async Task<List<IdentityRole>> GetDefaultOnesAsync(
bool includeDetails = false, CancellationToken cancellationToken = default) bool includeDetails = false, CancellationToken cancellationToken = default)
{ {
return await DbSet.IncludeDetails(includeDetails).Where(r => r.IsDefault).ToListAsync(GetCancellationToken(cancellationToken)); return await (await GetDbSetAsync())
.IncludeDetails(includeDetails)
.Where(r => r.IsDefault)
.ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<long> GetCountAsync( public async Task<long> GetCountAsync(
string filter = null, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.WhereIf(!filter.IsNullOrWhiteSpace(), .WhereIf(!filter.IsNullOrWhiteSpace(),
x => x.Name.Contains(filter) || x => x.Name.Contains(filter) ||
x.NormalizedName.Contains(filter)) x.NormalizedName.Contains(filter))
.LongCountAsync(GetCancellationToken(cancellationToken)); .LongCountAsync(GetCancellationToken(cancellationToken));
} }
[Obsolete("Use WithDetailsAsync")]
public override IQueryable<IdentityRole> WithDetails() public override IQueryable<IdentityRole> WithDetails()
{ {
return GetQueryable().IncludeDetails(); return GetQueryable().IncludeDetails();
} }
public override async Task<IQueryable<IdentityRole>> WithDetailsAsync()
{
return (await GetQueryableAsync()).IncludeDetails();
}
} }
} }

@ -6,7 +6,6 @@ using System.Security.Claims;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
@ -24,7 +23,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.OrderBy(x => x.Id) .OrderBy(x => x.Id)
.FirstOrDefaultAsync( .FirstOrDefaultAsync(
@ -37,20 +36,21 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
Guid id, Guid id,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from userRole in DbContext.Set<IdentityUserRole>() var dbContext = await GetDbContextAsync();
join role in DbContext.Roles on userRole.RoleId equals role.Id var query = from userRole in dbContext.Set<IdentityUserRole>()
join role in dbContext.Roles on userRole.RoleId equals role.Id
where userRole.UserId == id where userRole.UserId == id
select role.Name; select role.Name;
var organizationUnitIds = DbContext.Set<IdentityUserOrganizationUnit>().Where(q => q.UserId == id).Select(q => q.OrganizationUnitId).ToArray(); var organizationUnitIds = dbContext.Set<IdentityUserOrganizationUnit>().Where(q => q.UserId == id).Select(q => q.OrganizationUnitId).ToArray();
var organizationRoleIds = await ( var organizationRoleIds = await (
from ouRole in DbContext.Set<OrganizationUnitRole>() from ouRole in dbContext.Set<OrganizationUnitRole>()
join ou in DbContext.Set<OrganizationUnit>() on ouRole.OrganizationUnitId equals ou.Id join ou in dbContext.Set<OrganizationUnit>() on ouRole.OrganizationUnitId equals ou.Id
where organizationUnitIds.Contains(ouRole.OrganizationUnitId) where organizationUnitIds.Contains(ouRole.OrganizationUnitId)
select ouRole.RoleId select ouRole.RoleId
).ToListAsync(GetCancellationToken(cancellationToken)); ).ToListAsync(GetCancellationToken(cancellationToken));
var orgUnitRoleNameQuery = DbContext.Roles.Where(r => organizationRoleIds.Contains(r.Id)).Select(n => n.Name); var orgUnitRoleNameQuery = dbContext.Roles.Where(r => organizationRoleIds.Contains(r.Id)).Select(n => n.Name);
var resultQuery = query.Union(orgUnitRoleNameQuery); var resultQuery = query.Union(orgUnitRoleNameQuery);
return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken)); return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -59,10 +59,11 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
Guid id, Guid id,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
join roleOu in DbContext.Set<OrganizationUnitRole>() on userOu.OrganizationUnitId equals roleOu.OrganizationUnitId var query = from userOu in dbContext.Set<IdentityUserOrganizationUnit>()
join ou in DbContext.Set<OrganizationUnit>() on roleOu.OrganizationUnitId equals ou.Id join roleOu in dbContext.Set<OrganizationUnitRole>() on userOu.OrganizationUnitId equals roleOu.OrganizationUnitId
join userOuRoles in DbContext.Roles on roleOu.RoleId equals userOuRoles.Id join ou in dbContext.Set<OrganizationUnit>() on roleOu.OrganizationUnitId equals ou.Id
join userOuRoles in dbContext.Roles on roleOu.RoleId equals userOuRoles.Id
where userOu.UserId == id where userOu.UserId == id
select userOuRoles.Name; select userOuRoles.Name;
@ -77,7 +78,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey)) .Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey))
.OrderBy(x=>x.Id) .OrderBy(x=>x.Id)
@ -89,7 +90,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.OrderBy(x => x.Id) .OrderBy(x => x.Id)
.FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken));
@ -100,7 +101,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value)) .Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value))
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
@ -111,7 +112,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var role = await DbContext.Roles var dbContext = await GetDbContextAsync();
var role = await dbContext.Roles
.Where(x => x.NormalizedName == normalizedRoleName) .Where(x => x.NormalizedName == normalizedRoleName)
.OrderBy(x => x.Id) .OrderBy(x => x.Id)
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
@ -121,7 +124,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
return new List<IdentityUser>(); return new List<IdentityUser>();
} }
return await DbSet return await dbContext.Users
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.Where(u => u.Roles.Any(r => r.RoleId == role.Id)) .Where(u => u.Roles.Any(r => r.RoleId == role.Id))
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
@ -135,7 +138,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.WhereIf( .WhereIf(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
@ -156,24 +159,26 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from userRole in DbContext.Set<IdentityUserRole>() var dbContext = await GetDbContextAsync();
join role in DbContext.Roles.IncludeDetails(includeDetails) on userRole.RoleId equals role.Id
var query = from userRole in dbContext.Set<IdentityUserRole>()
join role in dbContext.Roles.IncludeDetails(includeDetails) on userRole.RoleId equals role.Id
where userRole.UserId == id where userRole.UserId == id
select role; select role;
//TODO: Needs improvement //TODO: Needs improvement
var userOrganizationsQuery = from userOrg in DbContext.Set<IdentityUserOrganizationUnit>() var userOrganizationsQuery = from userOrg in dbContext.Set<IdentityUserOrganizationUnit>()
join ou in DbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOrg.OrganizationUnitId equals ou.Id join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOrg.OrganizationUnitId equals ou.Id
where userOrg.UserId == id where userOrg.UserId == id
select ou; select ou;
var orgUserRoleQuery = DbContext.Set<OrganizationUnitRole>() var orgUserRoleQuery = dbContext.Set<OrganizationUnitRole>()
.Where(q => userOrganizationsQuery .Where(q => userOrganizationsQuery
.Select(t => t.Id) .Select(t => t.Id)
.Contains(q.OrganizationUnitId)) .Contains(q.OrganizationUnitId))
.Select(t => t.RoleId); .Select(t => t.RoleId);
var orgRoles = DbContext.Roles.Where(q => orgUserRoleQuery.Contains(q.Id)); var orgRoles = dbContext.Roles.Where(q => orgUserRoleQuery.Contains(q.Id));
var resultQuery = query.Union(orgRoles); var resultQuery = query.Union(orgRoles);
return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken)); return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken));
@ -200,9 +205,11 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from userOU in DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
join ou in DbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOU.OrganizationUnitId equals ou.Id
where userOU.UserId == id var query = from userOu in dbContext.Set<IdentityUserOrganizationUnit>()
join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOu.OrganizationUnitId equals ou.Id
where userOu.UserId == id
select ou; select ou;
return await query.ToListAsync(GetCancellationToken(cancellationToken)); return await query.ToListAsync(GetCancellationToken(cancellationToken));
@ -213,10 +220,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
join user in DbSet on userOu.UserId equals user.Id
var query = from userOu in dbContext.Set<IdentityUserOrganizationUnit>()
join user in dbContext.Users on userOu.UserId equals user.Id
where userOu.OrganizationUnitId == organizationUnitId where userOu.OrganizationUnitId == organizationUnitId
select user; select user;
return await query.ToListAsync(GetCancellationToken(cancellationToken)); return await query.ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -225,10 +235,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
join user in DbSet on userOu.UserId equals user.Id
var query = from userOu in dbContext.Set<IdentityUserOrganizationUnit>()
join user in dbContext.Users on userOu.UserId equals user.Id
where organizationUnitIds.Contains(userOu.OrganizationUnitId) where organizationUnitIds.Contains(userOu.OrganizationUnitId)
select user; select user;
return await query.ToListAsync(GetCancellationToken(cancellationToken)); return await query.ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -237,17 +250,26 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
join user in DbSet on userOu.UserId equals user.Id
join ou in DbContext.Set<OrganizationUnit>() on userOu.OrganizationUnitId equals ou.Id var query = from userOu in dbContext.Set<IdentityUserOrganizationUnit>()
join user in dbContext.Users on userOu.UserId equals user.Id
join ou in dbContext.Set<OrganizationUnit>() on userOu.OrganizationUnitId equals ou.Id
where ou.Code.StartsWith(code) where ou.Code.StartsWith(code)
select user; select user;
return await query.ToListAsync(GetCancellationToken(cancellationToken)); return await query.ToListAsync(GetCancellationToken(cancellationToken));
} }
[Obsolete("Use WithDetailsAsync method.")]
public override IQueryable<IdentityUser> WithDetails() public override IQueryable<IdentityUser> WithDetails()
{ {
return GetQueryable().IncludeDetails(); return GetQueryable().IncludeDetails();
} }
public override async Task<IQueryable<IdentityUser>> WithDetailsAsync()
{
return (await GetQueryableAsync()).IncludeDetails();
}
} }
} }

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq.Dynamic.Core; using System.Linq.Dynamic.Core;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
@ -25,7 +26,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.Where(x => x.ParentId == parentId) .Where(x => x.ParentId == parentId)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
@ -37,7 +38,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.Where(ou => ou.Code.StartsWith(code) && ou.Id != parentId.Value) .Where(ou => ou.Code.StartsWith(code) && ou.Id != parentId.Value)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
@ -50,7 +51,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.OrderBy(sorting ?? nameof(OrganizationUnit.DisplayName)) .OrderBy(sorting ?? nameof(OrganizationUnit.DisplayName))
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
@ -62,7 +63,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.Where(t => ids.Contains(t.Id)) .Where(t => ids.Contains(t.Id))
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
@ -73,7 +74,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await (await GetDbSetAsync())
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.OrderBy(x => x.Id) .OrderBy(x => x.Id)
.FirstOrDefaultAsync( .FirstOrDefaultAsync(
@ -90,10 +91,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from organizationRole in DbContext.Set<OrganizationUnitRole>() var dbContext = await GetDbContextAsync();
join role in DbContext.Roles.IncludeDetails(includeDetails) on organizationRole.RoleId equals role.Id
var query = from organizationRole in dbContext.Set<OrganizationUnitRole>()
join role in dbContext.Roles.IncludeDetails(includeDetails) on organizationRole.RoleId equals role.Id
where organizationRole.OrganizationUnitId == organizationUnit.Id where organizationRole.OrganizationUnitId == organizationUnit.Id
select role; select role;
query = query query = query
.OrderBy(sorting ?? nameof(IdentityRole.Name)) .OrderBy(sorting ?? nameof(IdentityRole.Name))
.PageBy(skipCount, maxResultCount); .PageBy(skipCount, maxResultCount);
@ -105,8 +109,10 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from organizationRole in DbContext.Set<OrganizationUnitRole>() var dbContext = await GetDbContextAsync();
join role in DbContext.Roles on organizationRole.RoleId equals role.Id
var query = from organizationRole in dbContext.Set<OrganizationUnitRole>()
join role in dbContext.Roles on organizationRole.RoleId equals role.Id
where organizationRole.OrganizationUnitId == organizationUnit.Id where organizationRole.OrganizationUnitId == organizationUnit.Id
select role; select role;
@ -123,8 +129,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList(); var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
var dbContext = await GetDbContextAsync();
return await DbContext.Roles return await dbContext.Roles
.Where(r => !roleIds.Contains(r.Id)) .Where(r => !roleIds.Contains(r.Id))
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter))
@ -139,8 +146,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList(); var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
var dbContext = await GetDbContextAsync();
return await DbContext.Roles return await dbContext.Roles
.Where(r => !roleIds.Contains(r.Id)) .Where(r => !roleIds.Contains(r.Id))
.WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter))
.CountAsync(cancellationToken); .CountAsync(cancellationToken);
@ -155,7 +163,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = CreateGetMembersFilteredQuery(organizationUnit, filter); var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter);
return await query.IncludeDetails(includeDetails).OrderBy(sorting ?? nameof(IdentityUser.UserName)) return await query.IncludeDetails(includeDetails).OrderBy(sorting ?? nameof(IdentityUser.UserName))
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
@ -167,7 +175,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
string filter = null, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = CreateGetMembersFilteredQuery(organizationUnit, filter); var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter);
return await query.CountAsync(GetCancellationToken(cancellationToken)); return await query.CountAsync(GetCancellationToken(cancellationToken));
} }
@ -181,11 +189,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var userIdsInOrganizationUnit = DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
var userIdsInOrganizationUnit = dbContext.Set<IdentityUserOrganizationUnit>()
.Where(uou => uou.OrganizationUnitId == organizationUnit.Id) .Where(uou => uou.OrganizationUnitId == organizationUnit.Id)
.Select(uou => uou.UserId); .Select(uou => uou.UserId);
var query = DbContext.Users var query = dbContext.Users
.Where(u => !userIdsInOrganizationUnit.Contains(u.Id)); .Where(u => !userIdsInOrganizationUnit.Contains(u.Id));
if (!filter.IsNullOrWhiteSpace()) if (!filter.IsNullOrWhiteSpace())
@ -209,11 +219,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
string filter = null, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var userIdsInOrganizationUnit = DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
var userIdsInOrganizationUnit = dbContext.Set<IdentityUserOrganizationUnit>()
.Where(uou => uou.OrganizationUnitId == organizationUnit.Id) .Where(uou => uou.OrganizationUnitId == organizationUnit.Id)
.Select(uou => uou.UserId); .Select(uou => uou.UserId);
return await DbContext.Users return await dbContext.Users
.Where(u => !userIdsInOrganizationUnit.Contains(u.Id)) .Where(u => !userIdsInOrganizationUnit.Contains(u.Id))
.WhereIf(!filter.IsNullOrWhiteSpace(), u => .WhereIf(!filter.IsNullOrWhiteSpace(), u =>
u.UserName.Contains(filter) || u.UserName.Contains(filter) ||
@ -222,11 +234,17 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
.CountAsync(cancellationToken); .CountAsync(cancellationToken);
} }
[Obsolete("Use WithDetailsAsync method.")]
public override IQueryable<OrganizationUnit> WithDetails() public override IQueryable<OrganizationUnit> WithDetails()
{ {
return GetQueryable().IncludeDetails(); return GetQueryable().IncludeDetails();
} }
public override async Task<IQueryable<OrganizationUnit>> WithDetailsAsync(params Expression<Func<OrganizationUnit, object>>[] propertySelectors)
{
return (await GetQueryableAsync()).IncludeDetails();
}
public virtual Task RemoveAllRolesAsync( public virtual Task RemoveAllRolesAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -239,17 +257,21 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var ouMembersQuery = await DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
var ouMembersQuery = await dbContext.Set<IdentityUserOrganizationUnit>()
.Where(q => q.OrganizationUnitId == organizationUnit.Id) .Where(q => q.OrganizationUnitId == organizationUnit.Id)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
DbContext.Set<IdentityUserOrganizationUnit>().RemoveRange(ouMembersQuery); dbContext.Set<IdentityUserOrganizationUnit>().RemoveRange(ouMembersQuery);
} }
protected virtual IQueryable<IdentityUser> CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null) protected virtual async Task<IQueryable<IdentityUser>> CreateGetMembersFilteredQueryAsync(OrganizationUnit organizationUnit, string filter = null)
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var dbContext = await GetDbContextAsync();
join user in DbContext.Users on userOu.UserId equals user.Id
var query = from userOu in dbContext.Set<IdentityUserOrganizationUnit>()
join user in dbContext.Users on userOu.UserId equals user.Id
where userOu.OrganizationUnitId == organizationUnit.Id where userOu.OrganizationUnitId == organizationUnit.Id
select user; select user;

@ -1,9 +1,7 @@
using MongoDB.Bson; using MongoDB.Driver;
using MongoDB.Driver;
using MongoDB.Driver.Linq; using MongoDB.Driver.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data;
using System.Linq; using System.Linq;
using System.Linq.Dynamic.Core; using System.Linq.Dynamic.Core;
using System.Threading; using System.Threading;
@ -11,7 +9,6 @@ using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB; using Volo.Abp.MongoDB;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity.MongoDB namespace Volo.Abp.Identity.MongoDB
{ {
@ -30,7 +27,7 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await (await GetMongoQueryableAsync(cancellationToken))
.Where(ou => ou.ParentId == parentId) .Where(ou => ou.ParentId == parentId)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -41,7 +38,7 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await (await GetMongoQueryableAsync(cancellationToken))
.Where(ou => ou.Code.StartsWith(code) && ou.Id != parentId.Value) .Where(ou => ou.Code.StartsWith(code) && ou.Id != parentId.Value)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -51,7 +48,7 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await (await GetMongoQueryableAsync(cancellationToken))
.Where(t => ids.Contains(t.Id)) .Where(t => ids.Contains(t.Id))
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
@ -63,7 +60,7 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await (await GetMongoQueryableAsync(cancellationToken))
.OrderBy(sorting ?? nameof(OrganizationUnit.DisplayName)) .OrderBy(sorting ?? nameof(OrganizationUnit.DisplayName))
.As<IMongoQueryable<OrganizationUnit>>() .As<IMongoQueryable<OrganizationUnit>>()
.PageBy<OrganizationUnit, IMongoQueryable<OrganizationUnit>>(skipCount, maxResultCount) .PageBy<OrganizationUnit, IMongoQueryable<OrganizationUnit>>(skipCount, maxResultCount)
@ -75,7 +72,7 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await (await GetMongoQueryableAsync(cancellationToken))
.OrderBy(x => x.Id) .OrderBy(x => x.Id)
.FirstOrDefaultAsync( .FirstOrDefaultAsync(
ou => ou.DisplayName == displayName, ou => ou.DisplayName == displayName,
@ -92,7 +89,10 @@ namespace Volo.Abp.Identity.MongoDB
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id))) var dbContext = await GetDbContextAsync(cancellationToken);
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(
dbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id))
)
.OrderBy(sorting ?? nameof(IdentityRole.Name)) .OrderBy(sorting ?? nameof(IdentityRole.Name))
.As<IMongoQueryable<IdentityRole>>() .As<IMongoQueryable<IdentityRole>>()
.PageBy<IdentityRole, IMongoQueryable<IdentityRole>>(skipCount, maxResultCount) .PageBy<IdentityRole, IMongoQueryable<IdentityRole>>(skipCount, maxResultCount)
@ -104,7 +104,10 @@ namespace Volo.Abp.Identity.MongoDB
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>( DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id))) var dbContext = await GetDbContextAsync(cancellationToken);
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(
dbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id))
)
.As<IMongoQueryable<IdentityRole>>() .As<IMongoQueryable<IdentityRole>>()
.CountAsync(cancellationToken); .CountAsync(cancellationToken);
} }
@ -119,7 +122,8 @@ namespace Volo.Abp.Identity.MongoDB
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(DbContext.Roles.AsQueryable()) var dbContext = await GetDbContextAsync(cancellationToken);
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(dbContext.Roles.AsQueryable())
.Where(r => !roleIds.Contains(r.Id)) .Where(r => !roleIds.Contains(r.Id))
.WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter))
.OrderBy(sorting ?? nameof(IdentityRole.Name)) .OrderBy(sorting ?? nameof(IdentityRole.Name))
@ -134,7 +138,8 @@ namespace Volo.Abp.Identity.MongoDB
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(DbContext.Roles.AsQueryable()) var dbContext = await GetDbContextAsync(cancellationToken);
return await ApplyDataFilters<IMongoQueryable<IdentityRole>, IdentityRole>(dbContext.Roles.AsQueryable())
.Where(r => !roleIds.Contains(r.Id)) .Where(r => !roleIds.Contains(r.Id))
.WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter))
.As<IMongoQueryable<IdentityRole>>() .As<IMongoQueryable<IdentityRole>>()
@ -150,13 +155,13 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = CreateGetMembersFilteredQuery(organizationUnit, filter); cancellationToken = GetCancellationToken(cancellationToken);
var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter, cancellationToken);
return await query return await query
.OrderBy(sorting ?? nameof(IdentityUser.UserName)) .OrderBy(sorting ?? nameof(IdentityUser.UserName))
.As<IMongoQueryable<IdentityUser>>() .As<IMongoQueryable<IdentityUser>>()
.PageBy<IdentityUser, IMongoQueryable<IdentityUser>>(skipCount, maxResultCount) .PageBy<IdentityUser, IMongoQueryable<IdentityUser>>(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(cancellationToken);
} }
public virtual async Task<int> GetMembersCountAsync( public virtual async Task<int> GetMembersCountAsync(
@ -164,9 +169,9 @@ namespace Volo.Abp.Identity.MongoDB
string filter = null, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = CreateGetMembersFilteredQuery(organizationUnit, filter); cancellationToken = GetCancellationToken(cancellationToken);
var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter, cancellationToken);
return await query.CountAsync(GetCancellationToken(cancellationToken)); return await query.CountAsync(cancellationToken);
} }
public async Task<List<IdentityUser>> GetUnaddedUsersAsync( public async Task<List<IdentityUser>> GetUnaddedUsersAsync(
@ -178,7 +183,8 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(DbContext.Users.AsQueryable()) var dbContext = await GetDbContextAsync(cancellationToken);
return await ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(dbContext.Users.AsQueryable())
.Where(u => !u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .Where(u => !u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>( .WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
@ -196,7 +202,8 @@ namespace Volo.Abp.Identity.MongoDB
public async Task<int> GetUnaddedUsersCountAsync(OrganizationUnit organizationUnit, string filter = null, public async Task<int> GetUnaddedUsersCountAsync(OrganizationUnit organizationUnit, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(DbContext.Users.AsQueryable()) var dbContext = await GetDbContextAsync(cancellationToken);
return await ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(dbContext.Users.AsQueryable())
.Where(u => !u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .Where(u => !u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>( .WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
@ -217,7 +224,8 @@ namespace Volo.Abp.Identity.MongoDB
public virtual async Task RemoveAllMembersAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) public virtual async Task RemoveAllMembersAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default)
{ {
var users = await ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(DbContext.Users.AsQueryable()) var dbContext = await GetDbContextAsync(cancellationToken);
var users = await ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(dbContext.Users.AsQueryable())
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.As<IMongoQueryable<IdentityUser>>() .As<IMongoQueryable<IdentityUser>>()
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
@ -225,13 +233,17 @@ namespace Volo.Abp.Identity.MongoDB
foreach (var user in users) foreach (var user in users)
{ {
user.RemoveOrganizationUnit(organizationUnit.Id); user.RemoveOrganizationUnit(organizationUnit.Id);
DbContext.Users.ReplaceOne(u => u.Id == user.Id, user); await dbContext.Users.ReplaceOneAsync(u => u.Id == user.Id, user, cancellationToken: cancellationToken);
} }
} }
protected virtual IMongoQueryable<IdentityUser> CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null) protected virtual async Task<IMongoQueryable<IdentityUser>> CreateGetMembersFilteredQueryAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default)
{ {
return ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(DbContext.Users.AsQueryable()) var dbContext = await GetDbContextAsync(cancellationToken);
return ApplyDataFilters<IMongoQueryable<IdentityUser>, IdentityUser>(dbContext.Users.AsQueryable())
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>( .WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),

Loading…
Cancel
Save