/// <summary> /// Creates an SqlQuery to perform an update based upon the values in the object delta. /// </summary> /// <param name="objectDelta">The object delta to create the query for.</param> /// <returns> /// The created <see cref="SqlQuery" />. /// </returns> public SqlQuery BuildUpdateSqlQuery(ObjectDelta objectDelta) { if (objectDelta == null) { throw new ArgumentNullException("objectDelta"); } var objectInfo = ObjectInfo.For(objectDelta.ForType); var builder = new UpdateSqlBuilder(this.SqlCharacters) .Table(objectInfo); foreach (var change in objectDelta.Changes) { builder.SetColumnValue(change.Key, change.Value); } var sqlQuery = builder .WhereEquals(objectInfo.TableInfo.IdentifierColumn.ColumnName, objectDelta.Identifier) .ToSqlQuery(); return sqlQuery; }
/// <summary> /// Builds an SqlQuery to update the database record for the specified instance with the current property values of the instance. /// </summary> /// <param name="objectInfo">The object information.</param> /// <param name="instance">The instance to update.</param> /// <returns> /// The created <see cref="SqlQuery" />. /// </returns> public SqlQuery BuildUpdateSqlQuery(IObjectInfo objectInfo, object instance) { if (objectInfo == null) { throw new ArgumentNullException("objectInfo"); } string updateCommand; if (!this.updateCommandCache.TryGetValue(objectInfo.ForType, out updateCommand)) { var builder = new UpdateSqlBuilder(this.SqlCharacters) .Table(objectInfo); for (int i = 0; i < objectInfo.TableInfo.Columns.Count; i++) { var columnInfo = objectInfo.TableInfo.Columns[i]; if (columnInfo.AllowUpdate) { builder.SetColumnValue(columnInfo.ColumnName, null); } } var updateSqlQuery = builder.WhereEquals(objectInfo.TableInfo.IdentifierColumn.ColumnName, objectInfo.GetIdentifierValue(instance)) .ToSqlQuery(); var newUpdateCommandCache = new Dictionary<Type, string>(this.updateCommandCache); newUpdateCommandCache[objectInfo.ForType] = updateSqlQuery.CommandText; updateCommand = updateSqlQuery.CommandText; this.updateCommandCache = newUpdateCommandCache; } var updateValues = objectInfo.GetUpdateValues(instance); return new SqlQuery(updateCommand, updateValues); }