SqlUpdateBuilder
SqlUpdateBuilder<T> construye sentencias UPDATE parametrizadas.
var result = new SqlUpdateBuilder<User>(new SqlServerDialect())
.Table("Users")
.Set(x => x.Name, "Roberto")
.Set(x => x.IsActive, false)
.Where(w => w.EqualTo(x => x.Id, 42))
.Build();
// → UPDATE [Users] SET [Name] = @pu0, [IsActive] = @pu1 WHERE [Id] = @pw0
Seguridad: Por defecto,
Build()lanza una excepción si no se establece ninguna cláusula WHERE. Llama aAllowUpdateAll()para permitir explícitamente la actualización de todas las filas.
Table
Firma
SqlUpdateBuilder<T> Table(string tableName, string? schema = null)
Descripción Establece el nombre de la tabla destino y el esquema opcional.
Set (Update)
Firma
SqlUpdateBuilder<T> Set<TValue>(Expression<Func<T, TValue>> column, TValue value)
Descripción
Agrega una cláusula SET parametrizada. Los parámetros usan el prefijo pu.
Ejemplo
builder.Table("Users").Set(x => x.Name, "Roberto").Set(x => x.IsActive, false);
// SET [Name] = @pu0, [IsActive] = @pu1
SetRaw
Firma
SqlUpdateBuilder<T> SetRaw(Expression<Func<T, object>> column, string rawExpression)
Descripción
Agrega una cláusula SET literal (sin parametrizar). Útil para expresiones del lado del servidor como GETDATE() o aritmética sobre valores existentes.
Ejemplo
builder.SetRaw(x => x.Counter, "Counter + 1");
// SET [Counter] = Counter + 1
builder.SetRaw(x => x.UpdatedAt, "GETDATE()");
// SET [UpdatedAt] = GETDATE()
SetColumn
Firma
SqlUpdateBuilder<T> SetColumn<TValue>(
Expression<Func<T, TValue>> target,
Expression<Func<T, TValue>> source)
Descripción Copia el valor actual de una columna a otra sin parámetros.
Ejemplo
builder.SetColumn(x => x.NameBackup, x => x.Name);
// SET [NameBackup] = [Name]
Where (Update)
Cuatro sobrecargas disponibles — misma semántica que SqlQueryBuilder:
SqlUpdateBuilder<T> Where(SqlWhereBuilder<T> whereBuilder)
SqlUpdateBuilder<T> Where(Action<SqlWhereBuilder<T>> configure)
SqlUpdateBuilder<T> Where(Expression<Func<T, bool>> predicate)
SqlUpdateBuilder<T> Where(ValiFlow<T> filter)
FromTable
Firma
SqlUpdateBuilder<T> FromTable(string sourceTable, string? alias = null)
Descripción Agrega una tabla fuente FROM (SQL Server / PostgreSQL) o JOIN (MySQL) a la sentencia UPDATE, habilitando actualizaciones multi-tabla. Lanza excepción en SQLite y Oracle.
Ejemplo
// SQL Server
builder.Table("Orders")
.Set(x => x.Status, "Enviado")
.FromTable("Shipments", "s")
.JoinOn("INNER JOIN", "[Shipments].[OrderId] = [Orders].[Id]")
.Where(x => x.Status == "Pendiente")
.Build();
// → UPDATE [Orders] SET [Status] = @pu0 FROM [Shipments] [s] INNER JOIN [Shipments].[OrderId] = [Orders].[Id]
// WHERE [Status] = @p0
JoinOn
Firma
SqlUpdateBuilder<T> JoinOn(string joinType, string onCondition)
Descripción
Agrega una condición JOIN a la cláusula FROM de la sentencia UPDATE. Se usa junto con FromTable.
AllowUpdateAll
Firma
SqlUpdateBuilder<T> AllowUpdateAll()
Descripción Permite explícitamente generar un UPDATE sin cláusula WHERE (afecta todas las filas). Llama solo cuando la actualización de toda la tabla es intencional.
OutputUpdated
Firma
SqlUpdateBuilder<T> OutputUpdated()
Descripción
Agrega OUTPUT INSERTED.* después de SET. Solo para SQL Server. Devuelve los nuevos valores de las filas actualizadas.
Returning (Update)
Firma
SqlUpdateBuilder<T> Returning(params Expression<Func<T, object>>[] columns)
Descripción
Agrega RETURNING * o columnas especificadas después de WHERE. Solo para PostgreSQL / SQLite.
Tag (Update)
Firma
SqlUpdateBuilder<T> Tag(string description)
Descripción Etiqueta la consulta con un comentario SQL.
Build (Update)
Firma
SqlQueryResult Build()
Descripción
Ensambla y devuelve el SqlQueryResult final. Lanza excepción si no hay asignaciones SET o si no hay cláusula WHERE (a menos que se haya llamado AllowUpdateAll()).
Ejemplo avanzado
var update = new SqlUpdateBuilder<User>()
.Table("Users")
.Set(u => u.LastLoginAt, DateTime.UtcNow)
.Where(u => u.IsActive == true);