public void SkipNotChangedProperties(Entity entity, IDictionary<string, object> existingRecord)
        {
            foreach (var property in entity
                .CreateProperties(getForeignCollection: false)
                .Where(x => x.IsKey == false)
                .WhereIsNotSkipped())
            {
                if (existingRecord.ContainsKey(property.ColumnName.Undecorate()))
                {
                    var oldValue = existingRecord[property.ColumnName.Undecorate()];
                    var equals = Equals(property.Value.Raw, oldValue);

                    if (equals)
                        property.Value.Raw = DataBehavior.Skip;
                }
            }
        }
        public string UpdateChanges(Entity entity, IDictionary<string, object> existingRecord)
        {
            var updateProperties = entity.CreateProperties(getForeignCollection: false)
                .Where(x => x.IsKey == false)
                .WhereIsNotSkipped().ToList();

            if (updateProperties.Any() == false)
                return "No changes";

            var changeBuilder = new StringBuilder();
            foreach (var property in updateProperties)
            {
                var columnName = property.ColumnName.Undecorate();
                if (existingRecord.ContainsKey(columnName))
                {
                    var oldValue = existingRecord[columnName];
                    changeBuilder.AppendFormat("{0} ({1} => {2})", property.Name, oldValue.ToStringSafe(), property.Value.AsString);
                    changeBuilder.AppendLine();
                }
            }

            return changeBuilder.ToString();
        }