SqlInsertBuilder
SqlInsertBuilder<T> construye sentencias INSERT parametrizadas. Soporta inserción de fila única, multi-fila, INSERT … SELECT, y patrones de resolución de conflictos.
var result = new SqlInsertBuilder<User>(new SqlServerDialect())
.Into("Users")
.Set(x => x.Name, "Alicia")
.Set(x => x.Age, 30)
.Build();
// → INSERT INTO [Users] ([Name], [Age]) VALUES (@pi0, @pi1)
Into
Firma
SqlInsertBuilder<T> Into(string tableName, string? schema = null)
Descripción Establece el nombre de la tabla destino y el esquema opcional.
Set
Firma
SqlInsertBuilder<T> Set<TValue>(Expression<Func<T, TValue>> column, TValue value)
Descripción Mapea una columna tipada a su valor de inserción para la fila actual.
Ejemplo
builder.Into("Users").Set(x => x.Name, "Alicia").Set(x => x.Age, 30);
// → INSERT INTO [Users] ([Name], [Age]) VALUES (@pi0, @pi1)
NextRow
Firma
SqlInsertBuilder<T> NextRow()
Descripción
Inicia una nueva fila para una inserción multi-fila. Las llamadas Set posteriores llenan la nueva fila. Todas las filas deben tener el mismo número de columnas.
Ejemplo
builder.Into("Users")
.Set(x => x.Name, "Alicia").Set(x => x.Age, 30)
.NextRow()
.Set(x => x.Name, "Roberto").Set(x => x.Age, 25)
.Build();
// → INSERT INTO [Users] ([Name], [Age]) VALUES (@pi0, @pi1), (@pi2, @pi3)
OutputInserted
Firma
SqlInsertBuilder<T> OutputInserted()
Descripción
Agrega OUTPUT INSERTED.* antes de VALUES. Solo para SQL Server — útil para recuperar columnas de identidad o calculadas después de la inserción.
Ejemplo
builder.Into("Users").Set(x => x.Name, "Alicia").OutputInserted().Build();
// → INSERT INTO [Users] ([Name]) OUTPUT INSERTED.* VALUES (@pi0)
Nota: Lanza
InvalidOperationExceptionsi se usa con un dialecto que no sea SQL Server. UsaReturning()para PostgreSQL / SQLite.
Returning
Firma
SqlInsertBuilder<T> Returning(params Expression<Func<T, object>>[] columns)
Descripción
Agrega RETURNING * o RETURNING col1, col2 después de VALUES. Compatible con PostgreSQL y SQLite 3.35+.
Ejemplo
builder.Into("Users").Set(x => x.Name, "Alicia")
.Returning(x => x.Id, x => x.CreatedAt)
.Build();
// → INSERT INTO "Users" ("Name") VALUES (@pi0) RETURNING "Id", "CreatedAt"
SelectFrom
Firma
SqlInsertBuilder<T> SelectFrom(SqlQueryResult selectQuery)
Descripción
Especifica una consulta SELECT cuyos resultados se insertarán en la tabla. Mutuamente exclusivo con Set.
Ejemplo
var select = new SqlQueryBuilder<User>(dialect)
.From("Archivo")
.Select(x => x.Name)
.Build();
new SqlInsertBuilder<User>(dialect)
.Into("Users")
.Columns(x => x.Name)
.SelectFrom(select)
.Build();
// → INSERT INTO [Users] ([Name]) SELECT [Name] FROM [Archivo]
Columns
Firma
SqlInsertBuilder<T> Columns(params Expression<Func<T, object>>[] columns)
Descripción
Especifica las columnas destino para INSERT … SELECT. Si no se llama, la lista de columnas se omite: INSERT INTO tabla SELECT ….
Tag (Insert)
Firma
SqlInsertBuilder<T> Tag(string description)
Descripción Etiqueta la consulta con un comentario antepuesto al SQL.
Resolución de Conflictos
OrIgnore (SQLite)
Firma
SqlInsertBuilder<T> OrIgnore()
Descripción
Emite INSERT OR IGNORE INTO .... Solo para SQLite.
OrReplace (SQLite)
Firma
SqlInsertBuilder<T> OrReplace()
Descripción
Emite INSERT OR REPLACE INTO .... Solo para SQLite.
OnConflictDoNothing (PostgreSQL / SQLite)
Firma
SqlInsertBuilder<T> OnConflictDoNothing()
Descripción
Agrega ON CONFLICT DO NOTHING después de VALUES.
Ejemplo
builder.Into("Users").Set(x => x.Email, "a@b.com").OnConflictDoNothing().Build();
// → INSERT INTO "Users" ("Email") VALUES (@pi0) ON CONFLICT DO NOTHING
OnConflictDoUpdate (PostgreSQL / SQLite)
Firma
SqlInsertBuilder<T> OnConflictDoUpdate(
Action<SqlInsertBuilder<T>> conflictKeys,
Action<SqlInsertBuilder<T>> updateAssignments)
Descripción
Agrega ON CONFLICT (cols) DO UPDATE SET ... después de VALUES. Pasa acciones que llaman a AddConflictKey y AddConflictUpdate.
Ejemplo
builder.Into("Users")
.Set(x => x.Email, "a@b.com")
.Set(x => x.Name, "Alicia")
.OnConflictDoUpdate(
claves => claves.AddConflictKey(x => x.Email),
updates => updates.AddConflictUpdate(x => x.Name, "Alicia"))
.Build();
// → INSERT INTO "Users" ("Email", "Name") VALUES (@pi0, @pi1)
// ON CONFLICT ("Email") DO UPDATE SET "Name" = @pu0
AddConflictKey
Firma
SqlInsertBuilder<T> AddConflictKey<TValue>(Expression<Func<T, TValue>> column)
Descripción
Registra una columna como parte de la lista de columnas objetivo del ON CONFLICT. Se llama dentro de la acción conflictKeys de OnConflictDoUpdate.
AddConflictUpdate
Firma
SqlInsertBuilder<T> AddConflictUpdate<TValue>(Expression<Func<T, TValue>> column, TValue value)
Descripción
Registra una asignación columna = valor para la cláusula DO UPDATE SET. Se llama dentro de la acción updateAssignments de OnConflictDoUpdate.
InsertIgnore (MySQL)
Firma
SqlInsertBuilder<T> InsertIgnore()
Descripción
Emite INSERT IGNORE INTO .... Solo para MySQL.
OnDuplicateKeyUpdate (MySQL)
Firma
SqlInsertBuilder<T> OnDuplicateKeyUpdate(Action<SqlInsertBuilder<T>> configure)
Descripción
Agrega ON DUPLICATE KEY UPDATE col = @pu... después de VALUES. Solo para MySQL.
Ejemplo
builder.Into("Users")
.Set(x => x.Email, "a@b.com")
.OnDuplicateKeyUpdate(u => u.AddDuplicateKeyAssignment(x => x.Name, "Alicia"))
.Build();
// → INSERT INTO `Users` (`Email`) VALUES (@pi0) ON DUPLICATE KEY UPDATE `Name` = @pu0
AddDuplicateKeyAssignment
Firma
SqlInsertBuilder<T> AddDuplicateKeyAssignment<TValue>(Expression<Func<T, TValue>> column, TValue value)
Descripción Registra una asignación columna = valor para la cláusula ON DUPLICATE KEY UPDATE.
Build (Insert)
Firma
SqlQueryResult Build()
Descripción
Ensambla y devuelve el SqlQueryResult final.
Ejemplo avanzado
var insert = new SqlInsertBuilder<User>()
.Into("Users")
.Value(u => u.Email, "a@b.com")
.Value(u => u.IsActive, true)
.Returning(u => u.Id);