/// <inheritdoc /> public virtual RegisteredStreamDto?GetRegisteredStream(Guid id, Guid userId) { // NOTE: Try locally tracked first, otherwise check database var result = RegisteredStreams.Local .FirstOrDefault(rs => rs.Id == id); if (result != null && result.UserId != userId) { return(null); } if (result == null) { result = RegisteredStreams .AsNoTracking() .FirstOrDefault(rs => rs.Id == id); } if (result != null) { var utcNow = DateTimeOffset.UtcNow; if (result.ValidUntil < utcNow) { Entry(result).State = EntityState.Detached; result = null; } } return(result); }
/// <inheritdoc /> public virtual void PersistRegisteredStream(RegisteredStreamDto registeredStream) { ApplicationIntentDeterminer.CheckRepositoryReadOnly(); Retry.Do(() => Database.ExecuteSqlRaw(SqlStatements.DeleteFromRegisteredStreams)); var utcNow = DateTimeOffset.UtcNow; ChangeTracker .Entries <RegisteredStreamDto>() .Where(e => e.Entity.ValidUntil < utcNow) .ToList() .ForEach(e => e.State = EntityState.Detached); RegisteredStreams.Add(registeredStream); PersistChanges(); }