public static void SetCreationAuditProperties(object entityAsObj, int?userId)
        {
            IHasCreationTime hasCreationTime = entityAsObj as IHasCreationTime;

            if (hasCreationTime == null)
            {
                return;
            }
            if (hasCreationTime.CreatedDate == new DateTime())
            {
                hasCreationTime.CreatedDate = DateTime.Now;
            }
            if (!(entityAsObj is ICreationAudited) || !userId.HasValue)
            {
                return;
            }
            ICreationAudited creationAudited = entityAsObj as ICreationAudited;

            if (creationAudited.GetCreatorUserId().HasValue)
            {
                return;
            }
            creationAudited.SetCreatorUserId(userId);
        }
Ejemplo n.º 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));
        }