/// <summary>
        /// https://stackoverflow.com/questions/26355486/entity-framework-6-audit-track-changes
        /// </summary>
        /// <param name="context"></param>
        private void ModifyAuditableEntities(DbContext context)
        {
            var now             = _dateTime.UtcNow;
            var user            = _identityService?.UserId ?? Guid.Empty;
            var auditedEntities = context.ChangeTracker.Entries <IEntityAuditable>().ToList();

            foreach (var added in auditedEntities.Where(p => p.State == EntityState.Added)
                     .Select(p => p.Entity))
            {
                added.Create(now, user);
            }

            foreach (var modified in auditedEntities.Where(p => p.State == EntityState.Modified)
                     .Select(p => p.Entity))
            {
                modified.Change(now, user);
            }

            var auditedLogicalRemoveEntities = context
                                               .ChangeTracker
                                               .Entries <IEntityAuditableLogicalRemove>()
                                               .Where(p => p.State == EntityState.Deleted)
                                               .ToList();

            foreach (var removed in auditedLogicalRemoveEntities)
            {
                _customLogger.Verbose($"Logically deleting the entity {removed.Entity.GetType()}");
                removed.Entity.Delete(now, user);
                removed.State = EntityState.Modified;
            }
        }
Exemple #2
0
 public Task <T> GetOrCreateAsync <T>(string key, Func <Task <T> > generator, TimeSpan?timeSpan = null)
 {
     return(_memoryCache.GetOrCreateAsync(key, entry =>
     {
         _customLogger.Verbose($"Retrieving from cache {key}");
         entry.SlidingExpiration = timeSpan;
         return generator();
     }));
 }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
        /// <param name="next"></param>
        /// <returns></returns>
        public Task Handle(TRequest request, CancellationToken cancellationToken, Func <TRequest, CancellationToken, Task> next)
        {
            var name = typeof(TRequest).Name;

            _timer.Start();

            var response = next(request, cancellationToken);

            _timer.Stop();

            _logger.Verbose($"TimerBehaviour: {name} ({_timer.ElapsedMilliseconds} milliseconds) {request}");

            return(response);
        }