private EntityChange CreateEntityChangeInfo(EntityEntry entityEntry) { var entity = entityEntry.Entity; EntityChangeType changeType; switch (entityEntry.State) { case EntityState.Added: changeType = EntityChangeType.Create; break; case EntityState.Deleted: changeType = EntityChangeType.Delete; break; case EntityState.Modified: changeType = IsDeleted(entityEntry) ? EntityChangeType.Delete : EntityChangeType.Change; break; case EntityState.Detached: case EntityState.Unchanged: default: return(null); } var entityId = GetEntityId(entity); if (entityId == null && changeType != EntityChangeType.Create) { return(null); } var entityType = entity.GetType(); var entityChangeInfo = new EntityChange { ChangeTime = Clock.Now, ChangeType = changeType, EntityEntry = entityEntry, // [NotMapped] EntityId = entityId, EntityTypeFullName = entityType.FullName, EntityTypeName = entityType.Name, EntityTypeTableName = entityEntry.Metadata.Relational().TableName, PropertyChanges = GetPropertyChanges(entityEntry) }; return(entityChangeInfo); }
private DateTime GetChangeTime(EntityChange entityChange) { var entity = entityChange.EntityEntry.As <EntityEntry>().Entity; switch (entityChange.ChangeType) { case EntityChangeType.Create: return((entity as ICreatedDateAuditableEntity)?.AACreatedDate ?? Clock.Now); case EntityChangeType.Delete: return((entity as IUpdatedDateAuditableEntity)?.AAUpdatedDate ?? Clock.Now); case EntityChangeType.Change: return((entity as IUpdatedDateAuditableEntity)?.AAUpdatedDate ?? Clock.Now); default: return(Clock.Now); } }