public long Update(Model.Model model) { var attributes = model.GetAttributes(); var oldAttributes = model.OriginAttributes; var changedAttributes = new Dictionary <string, object>(); foreach (var(columnName, value) in attributes) { if (!value.Equals(oldAttributes[columnName])) { changedAttributes.Add(columnName, value); } } var primaryColumnName = model.GetPrimaryColumnName(); var cmd = new MySqlCommand { Connection = _getConnection() }; var sql = "UPDATE " + model.TableName() + " SET"; cmd.CommandText = changedAttributes.Keys.Aggregate(sql, (current, attributesKey) => current + " " + attributesKey + "=@" + attributesKey); cmd.CommandText += " where " + primaryColumnName + "=@_primaryValue"; foreach (var(key, value) in changedAttributes) { cmd.Parameters.AddWithValue("@" + key, value); } cmd.Parameters.AddWithValue("_primaryValue", oldAttributes[primaryColumnName]); cmd.ExecuteNonQuery(); return(cmd.LastInsertedId); }