public override int Update(ITransaction transaction, ClassMapping mapping, DaoCriteria crit, IDictionary<string, object> propValues)
{
// This must be run BEFORE PreProcessPropertyValues, since PreProcessPropertyValues can mutate the collection
var valueStrings = GetValueStrings(mapping.Table, propValues);
PreProcessPropertyValues(mapping.Table, propValues);
SqlDaQuery query = _sqlQueryCache.Get();
try
{
// Make the "update table set blah = something" part.
query.Sql.Append("UPDATE ");
query.Sql.Append(mapping.Table);
query.Sql.Append(" SET ");
bool first = true;
foreach (string key in propValues.Keys)
{
if (!first)
{
query.Sql.Append(", ");
}
else
{
first = false;
}
query.Sql.Append(key);
if (valueStrings != null && valueStrings.ContainsKey(key))
{
query.Sql.Append(" = " + valueStrings[key]);
}
else
{
query.Sql.Append(" = ?");
}
query.Params.Add(propValues[key]);
}
// Add the "where blah, blah, blah" part.
ExpressionsToQuery(query, crit, mapping);
return SqlConnectionUtilities.XSafeCommand(_connDesc, (SqlTransaction)transaction, query.Sql.ToString(), query.Params);
}
finally
{
_sqlQueryCache.Return(query);
}
}