Я копался в исходном коде Identity на Github и закончился UserStore
:
public override Task<TUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default(CancellationToken))
{
cancellationToken.ThrowIfCancellationRequested();
ThrowIfDisposed();
var id = ConvertIdFromString(userId);
return UsersSet.FindAsync(new object[] { id }, cancellationToken);
}
UsersSet
beeing типа DbSet<TUser>
, Identity не имеет возможности напрямую управлять кэшированием, но использует внутренние компоненты EF.
Копаясь в исходном коде EF, я закончил DbContext
:
object IDbSetCache.GetOrAddSet(IDbSetSource source, Type type)
{
CheckDisposed();
if (_sets == null)
{
_sets = new Dictionary<Type, object>();
}
if (!_sets.TryGetValue(type, out var set))
{
set = source.Create(this, type);
_sets[type] = set;
}
return set;
}
и похоже, что существует механизм кэширования, поддерживаемый простым и простым Dictionary
.
Однако, как указал Мэтт Г. в своем комментарии, решение для управления кэшированием находится на уровне выше вашего сервиса: оно связано с тем, как вы управляете своей областью зависимости при внедрении UserManager
.