public void Log(AbstractPreDatabaseOperationEvent @event, object[] newstate, object[] oldstate, string tableName, SqlConnection connection) { //if we are writing audit table - we dont log the information if (tableName == "[simpleaudit]" || tableName == "\"simpleaudit\"") { return; } var time = DateTime.Now; string user; if (HttpContext.Current != null) { user = HttpContext.Current.User.Identity.Name; } else { user = "******"; } if (oldstate != null) { var dirties = @event.Persister.FindDirty(newstate, oldstate, @event.Entity, @event.Session); foreach (int dirty in dirties) { var property = @event.Persister.PropertyNames[dirty]; var oldvalue = "null"; if (oldstate[dirty] != null) { oldvalue = oldstate[dirty].ToString(); } var newvalue = "null"; if (newstate[dirty] != null) { newvalue = newstate[dirty].ToString(); } SaveAudit(user, time, newvalue, oldvalue, property, tableName, connection); } } else { for (int i = 0; i < newstate.Length; i++) { object obj = newstate[i]; if (obj != null) { var newValue = obj.ToString(); var value = newValue.Substring(0, Math.Min(newValue.Length, 100)); var property = @event.Persister.PropertyNames[i]; SaveAudit(user, time, value, "no", property, tableName, connection); } } } }
private static bool ForceAggregateRootVersion(AbstractPreDatabaseOperationEvent @event) { IAggregateStatePart statePart = @event.Entity as IAggregateStatePart; if (statePart == null) { return(false); } if (!IsAggregateRootDirty(@event.Session, statePart.AggregateRootState)) { @event.Session.Lock(statePart.AggregateRootState, LockMode.Force); } return(false); }
/// <summary> /// Can only be used by PreUpdate & PreInsert /// </summary> /// <param name="event"></param> /// <param name="propertyName"></param> /// <param name="propertyValue"></param> public static void UpdateState(this AbstractPreDatabaseOperationEvent @event, string propertyName, object propertyValue) { var update = @event as PreUpdateEvent; if (update != null) { update.UpdateState(propertyName, propertyValue); } else { var insert = @event as PreInsertEvent; Verify.IsNotNull(insert, "This extenion method can only be used in PreUpdate & PreInsert use-cases"); insert.UpdateState(propertyName, propertyValue); } }
private void HandleTimeStamps(AbstractPreDatabaseOperationEvent @event, bool isCreating) { var now = DateTime.Now; if (@event.Entity is TimestampedEntity entity) { if (isCreating) { if (entity.CreatedAt == null) { entity.CreatedAt = now; } if (entity.UpdatedAt == null) { entity.UpdatedAt = now; } } else { entity.UpdatedAt = now; } } }