public override string ToUpdateStatement(T item, bool excludeDefaults = false)
        {
            var setFields       = new StringBuilder();
            var dialectProvider = OrmLiteConfig.DialectProvider;

            foreach (var fieldDef in ModelDef.FieldDefinitions)
            {
                if (UpdateFields.Count > 0 && !UpdateFields.Contains(fieldDef.Name) || fieldDef.AutoIncrement)
                {
                    continue; // added
                }
                var value = fieldDef.GetValue(item);
                if (excludeDefaults &&
                    (value == null || (!fieldDef.IsNullable && value.Equals(value.GetType().GetDefaultValue()))))
                {
                    continue;
                }

                fieldDef.GetQuotedValue(item);

                if (setFields.Length > 0)
                {
                    setFields.Append(",");
                }
                setFields.AppendFormat("{0} = {1}",
                                       dialectProvider.GetQuotedColumnName(fieldDef.FieldName),
                                       dialectProvider.GetQuotedValue(value, fieldDef.FieldType));
            }

            if (setFields.Length == 0)
            {
                throw new ArgumentException("No non-null or non-default values were provided for type: " + typeof(T).Name);
            }

            return(string.Format("UPDATE {0} SET {1} {2}",
                                 dialectProvider.GetQuotedTableName(ModelDef), setFields, WhereExpression));
        }