Ejemplo n.º 1
0
        /// <summary>
        /// Creates the Audit Event.
        /// </summary>
        public EntityFrameworkEvent CreateAuditEvent(IAuditDbContext context)
        {
            var dbContext       = context.DbContext;
            var modifiedEntries = GetModifiedEntries(context);

            if (modifiedEntries.Count == 0)
            {
                return(null);
            }
            var dbConnection       = IsRelational(dbContext) ? dbContext.Database.GetDbConnection() : null;
            var clientConnectionId = GetClientConnectionId(dbConnection);
            var efEvent            = new EntityFrameworkEvent()
            {
                Entries       = new List <EventEntry>(),
                Database      = dbConnection?.Database,
                ConnectionId  = clientConnectionId,
                TransactionId = GetCurrentTransactionId(dbContext, clientConnectionId)
            };

            foreach (var entry in modifiedEntries)
            {
                var entity            = entry.Entity;
                var validationResults = DbContextHelper.GetValidationResults(entity);
                var entityType        = dbContext.Model.FindEntityType(entry.Entity.GetType());
                efEvent.Entries.Add(new EventEntry()
                {
                    Valid             = validationResults == null,
                    ValidationResults = validationResults?.Select(x => x.ErrorMessage).ToList(),
                    Entity            = context.IncludeEntityObjects ? entity : null,
                    Action            = DbContextHelper.GetStateName(entry.State),
                    Changes           = entry.State == EntityState.Modified ? GetChanges(dbContext, entry) : null,
                    ColumnValues      = GetColumnValues(dbContext, entry),
                    PrimaryKey        = GetPrimaryKey(entityType, entity),
                    Table             = GetEntityName(entityType)
                });
            }
            return(efEvent);
        }