public static void SetDeletionAuditProperties(object entityAsObj, int?userId)
        {
            if (entityAsObj is IHasDeletionTime)
            {
                IHasDeletionTime ihasDeletionTime = (IHasDeletionTime)ObjectExtensions.As <IHasDeletionTime>(entityAsObj);
                if (!ihasDeletionTime.DeletedDate.HasValue)
                {
                    ihasDeletionTime.DeletedDate = (new DateTime?(DateTime.Now));
                }
            }
            if (!(entityAsObj is IDeletionAudited))
            {
                return;
            }
            IDeletionAudited ideletionAudited = (IDeletionAudited)ObjectExtensions.As <IDeletionAudited>(entityAsObj);

            if (ideletionAudited.DeletedUserId.HasValue)
            {
                return;
            }
            if (!userId.HasValue)
            {
                ideletionAudited.DeletedUserId = (new int?());
            }
            else
            {
                ideletionAudited.DeletedUserId = (userId);
            }
        }
Пример #2
0
        public override Task <int> SaveChangesAsync(CancellationToken cancellationToken = default)
        {
            foreach (var entry in ChangeTracker.Entries().ToList())
            {
                switch (entry.State)
                {
                case EntityState.Added:
                {
                    IHasCreationTime hasCreation = entry.Entity as IHasCreationTime;
                    if (hasCreation == null)
                    {
                        continue;
                    }
                    hasCreation.CreationTime = DateTime.Now;

                    ICreationAudited creationAudited = entry.Entity as ICreationAudited;
                    if (creationAudited == null)
                    {
                        continue;
                    }
                    if (UserIdentifier != null && UserIdentifier.UserId.HasValue)
                    {
                        creationAudited.CreatorUserId = UserIdentifier.UserId.Value;
                    }
                }
                break;

                case EntityState.Modified:
                {
                    IHasModificationTime hasModification = entry.Entity as IHasModificationTime;
                    if (hasModification == null)
                    {
                        continue;
                    }
                    hasModification.LastModificationTime = DateTime.Now;

                    IModificationAudited modificationAudited = entry.Entity as IModificationAudited;
                    if (modificationAudited == null)
                    {
                        continue;
                    }
                    if (UserIdentifier != null && UserIdentifier.UserId.HasValue)
                    {
                        modificationAudited.LastModifierUserId = UserIdentifier.UserId.Value;
                    }
                }
                break;

                case EntityState.Deleted:
                {
                    IHasDeletionTime hasDeletion = entry.Entity as IHasDeletionTime;
                    if (hasDeletion == null)
                    {
                        continue;
                    }
                    entry.Reload();
                    entry.State = EntityState.Modified;

                    hasDeletion.DeletionTime = DateTime.Now;
                    hasDeletion.IsDeleted    = true;

                    IDeletionAudited deletionAudited = entry.Entity as IDeletionAudited;
                    if (deletionAudited == null)
                    {
                        continue;
                    }
                    if (UserIdentifier != null && UserIdentifier.UserId.HasValue)
                    {
                        deletionAudited.DeleterUserId = UserIdentifier.UserId.Value;
                    }
                }
                break;
                }
            }


            return(base.SaveChangesAsync(cancellationToken));
        }