コード例 #1
0
        protected virtual AggregateChangeReport ApplyStoveConcepts()
        {
            var changeReport = new AggregateChangeReport();

            long?userId = GetAuditUserId();
            List <DbEntityEntry> entries = ChangeTracker.Entries().ToList();

            foreach (DbEntityEntry entry in entries)
            {
                switch (entry.State)
                {
                case EntityState.Added:
                    CheckAndSetId(entry.Entity);
                    SetCreationAuditProperties(entry.Entity, userId);
                    break;

                case EntityState.Modified:
                    SetModificationAuditProperties(entry, userId);
                    if (entry.Entity is ISoftDelete && entry.Entity.As <ISoftDelete>().IsDeleted)
                    {
                        SetDeletionAuditProperties(entry.Entity, userId);
                    }
                    break;

                case EntityState.Deleted:
                    CancelDeletionForSoftDelete(entry);
                    SetDeletionAuditProperties(entry.Entity, userId);
                    break;
                }

                AddDomainEvents(changeReport.DomainEvents, entry.Entity);
            }

            return(changeReport);
        }
コード例 #2
0
        protected virtual AggregateChangeReport ApplyStoveConcepts()
        {
            var changeReport = new AggregateChangeReport();

            long?userId = GetAuditUserId();

            foreach (EntityEntry entry in ChangeTracker.Entries().ToList())
            {
                ApplyStoveConcepts(entry, userId, changeReport);
            }

            return(changeReport);
        }
コード例 #3
0
 public override int SaveChanges()
 {
     try
     {
         AggregateChangeReport changeReport = ApplyStoveConcepts();
         int result = base.SaveChanges();
         AggregateChangeEventHelper.PublishEvents(changeReport);
         return(result);
     }
     catch (DbUpdateConcurrencyException ex)
     {
         throw new StoveDbConcurrencyException(ex.Message, ex);
     }
 }
コード例 #4
0
 public override int SaveChanges()
 {
     try
     {
         AggregateChangeReport aggregateChangeReport = ApplyStoveConcepts();
         int result = base.SaveChanges();
         AggregateChangeEventHelper.PublishEvents(aggregateChangeReport);
         return(result);
     }
     catch (DbEntityValidationException ex)
     {
         LogDbEntityValidationException(ex);
         throw;
     }
 }
コード例 #5
0
        public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                AggregateChangeReport changeReport = ApplyStoveConcepts();
                int result = await base.SaveChangesAsync(cancellationToken);

                await AggregateChangeEventHelper.PublishEventsAsync(changeReport, cancellationToken);

                return(result);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                throw new StoveDbConcurrencyException(ex.Message, ex);
            }
        }
コード例 #6
0
        public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken)
        {
            try
            {
                AggregateChangeReport aggregateChangeReport = ApplyStoveConcepts();
                int result = await base.SaveChangesAsync(cancellationToken);

                await AggregateChangeEventHelper.PublishEventsAsync(aggregateChangeReport, cancellationToken);

                return(result);
            }
            catch (DbEntityValidationException ex)
            {
                LogDbEntityValidationException(ex);
                throw;
            }
        }
コード例 #7
0
        protected virtual void ApplyStoveConcepts(EntityEntry entry, long?userId, AggregateChangeReport changeReport)
        {
            switch (entry.State)
            {
            case EntityState.Added:
                ApplyStoveConceptsForAddedEntity(entry, userId);
                break;

            case EntityState.Modified:
                ApplyStoveConceptsForModifiedEntity(entry, userId);
                break;

            case EntityState.Deleted:
                ApplyStoveConceptsForDeletedEntity(entry, userId);
                break;
            }

            AddDomainEvents(changeReport.DomainEvents, entry.Entity);
        }