コード例 #1
0
        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);
                    }
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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;
                }
            }
        }