Beispiel #1
0
        public override async Task <int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
        {
            try {
                var auditLog = AuditingManager?.Current?.Log;

                List <EntityChangeInfo> entityChangeList = null;
                if (auditLog != null)
                {
                    entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList());
                }

                var changeReport = ApplyRocketConcepts();

                var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);

                await EntityChangeEventHelper.TriggerEventsAsync(changeReport);

                if (auditLog != null)
                {
                    EntityHistoryHelper.UpdateChangeList(entityChangeList);
                    auditLog.EntityChanges.AddRange(entityChangeList);
                    Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log");
                }

                return(result);
            } catch (DbUpdateConcurrencyException ex) {
                throw new RocketDbConcurrencyException(ex.Message, ex);
            } finally {
                ChangeTracker.AutoDetectChangesEnabled = true;
            }
        }
Beispiel #2
0
        public override int SaveChanges()
        {
            var changeSet = EntityHistoryHelper?.CreateEntityChangeSet(this);

            var result = base.SaveChanges();

            EntityHistoryHelper?.Save(this, changeSet);

            return(result);
        }
Beispiel #3
0
        public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            var changeSet = EntityHistoryHelper?.CreateEntityChangeSet(this);

            var result = await base.SaveChangesAsync(cancellationToken);

            if (EntityHistoryHelper != null)
            {
                await EntityHistoryHelper.SaveAsync(this, changeSet);
            }

            return(result);
        }
Beispiel #4
0
        public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken = default)
        {
            if (EntityHistoryHelper == null)
            {
                return(await base.SaveChangesAsync());
            }

            var changeSet = EntityHistoryHelper.CreateEntityChangeSet(ChangeTracker.Entries().ToList());

            var result = await base.SaveChangesAsync(cancellationToken);

            await EntityHistoryHelper.SaveAsync(changeSet);

            return(result);
        }
Beispiel #5
0
        public override int SaveChanges()
        {
            if (EntityHistoryHelper == null)
            {
                return(base.SaveChanges());
            }

            var changeSet = EntityHistoryHelper.CreateEntityChangeSet(ChangeTracker.Entries().ToList());

            var result = base.SaveChanges();

            EntityHistoryHelper.Save(changeSet);

            return(result);
        }
Beispiel #6
0
        public override int SaveChanges(bool acceptAllChangesOnSuccess)
        {
            //TODO: Reduce duplications with SaveChangesAsync
            //TODO: Instead of adding entity changes to audit log, write them to uow and add to audit log only if uow succeed

            ChangeTracker.DetectChanges();

            try
            {
                ChangeTracker.AutoDetectChangesEnabled = false; //TODO: Why this is needed?

                var auditLog = AuditingManager?.Current?.Log;

                List <EntityChangeInfo> entityChangeList = null;
                if (auditLog != null)
                {
                    entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList());
                }

                var changeReport = ApplyAbpConcepts();

                var result = base.SaveChanges(acceptAllChangesOnSuccess);

                AsyncHelper.RunSync(() => EntityChangeEventHelper.TriggerEventsAsync(changeReport));

                if (auditLog != null)
                {
                    EntityHistoryHelper.UpdateChangeList(entityChangeList);
                    auditLog.EntityChanges.AddRange(entityChangeList);
                }

                return(result);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                throw new AbpDbConcurrencyException(ex.Message, ex);
            }
            finally
            {
                ChangeTracker.AutoDetectChangesEnabled = true;
            }
        }