private EntityFrameworkAuditEvent CreateAuditEvent() { List <EntityEntry> modifiedEntries = GetModifiedEntries(); if (modifiedEntries.Count == 0) { return(null); } DbConnection connection = this.IsProviderRelational() ? Database.GetDbConnection() : null; string connectionID = connection?.GetConnectionID(); EntityFrameworkAuditEvent auditEvent = new EntityFrameworkAuditEvent() { DatabaseActions = new List <DatabaseActionEntry>(), }; if (Settings.IncludeDatabase) { auditEvent.Database = connection?.Database; } if (Settings.IncludeConnectionID) { auditEvent.ConnectionID = connectionID; } if (Settings.IncludeTransactionID) { auditEvent.TransactionID = this.GetCurrentTransactionID(); } foreach (EntityEntry modifiedEntry in modifiedEntries) { object entity = modifiedEntry.Entity; IEntityType entityType = Model.FindEntityType(entity.GetType()); // TODO: cache Dictionary <string, FieldValueChange> columnValues = modifiedEntry.State == EntityState.Modified ? GetChanges(modifiedEntry) : GetColumnValues(modifiedEntry); if (columnValues.Count == 0) { continue; } DatabaseActionEntry entry = new DatabaseActionEntry() { EntityEntry = modifiedEntry, DatabaseAction = EntityFrameworkHelpers.GetActionFromEntityState(modifiedEntry.State), ColumnValues = columnValues, PrimaryKey = entityType.GetPrimaryKeyValue(entity), Table = this.GetDbSetForType(entity.GetType()).Name // TODO: give option of table name }; auditEvent.DatabaseActions.Add(entry); } return(auditEvent.DatabaseActions.Count != 0 ? auditEvent : null); }
private bool ShouldIncludeEntity(EntityEntry entry) { Type type = entry.Entity.GetType(); bool?include = GetIncludeIgnoreAttribute(type); if (Settings.MemberMode == MemberMode.OptIn && (include == null || include.Value == false)) { return(false); } else if (include != null && include.Value == false) { return(false); } DatabaseAction?includeDatabaseActions = GetActionsAttribute(type); DatabaseAction databaseAction = EntityFrameworkHelpers.GetActionFromEntityState(entry.State); return(includeDatabaseActions == null || includeDatabaseActions.Value.HasFlag(databaseAction)); }