예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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();
        }