コード例 #1
0
ファイル: ArgusDbContext.cs プロジェクト: nathankodilla/Argus
        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);
        }
コード例 #2
0
ファイル: ArgusDbContext.cs プロジェクト: nathankodilla/Argus
        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));
        }