Te damos la bienvenida a nuestro sitio web, en este lugar encontrarás la respuesta a lo que estabas buscando.
Solución:
Solo puedes agregar un Sql("SQL COMMAND HERE")
llamada de método a su migración Up
método. No olvide agregar también la instrucción drop al Down
método. Puede crear una migración vacía si lo necesita, simplemente ejecutando Add-Migration
sin cambios en el modelo.
public partial class Example : DbMigration
public override void Up()
Sql("CREATE OR REPLACE TRIGGER [name] BEFORE UPDATE ON myTable ...");
public override void Down()
Sql("DROP TRIGGER [name]");
Recientemente me enfrenté a un problema similar y no encontré una solución para no escribir sql manualmente. Así que escribí un pequeño paquete que permite escribir migraciones usando el generador de entidades Ef Core como este:
modelBuilder.Entity()
.AfterInsert(trigger => trigger
.Action(triggerAction => triggerAction
.Upsert(transaction => new transaction.UserId ,
insertedTransaction => new UserBalance UserId = transaction.UserId, Balance = insertedTransaction.Sum ,
(insertedTransaction, oldBalance) => new UserBalance Balance = oldBalance.Balance + insertedTransaction.Sum )));
Este código se traducirá a sql y se aplicará a las migraciones.
public partial class AddTriggers : Migration
protected override void Up(MigrationBuilder migrationBuilder)
migrationBuilder.Sql("CREATE FUNCTION LC_TRIGGER_AFTER_INSERT_TRANSACTION() RETURNS trigger as $LC_TRIGGER_AFTER_INSERT_TRANSACTION$ BEGIN INSERT INTO user_balances (user_id, balance) VALUES (NEW.user_id, NEW.sum) ON CONFLICT (user_id) DO UPDATE SET balance = user_balances.balance + NEW.sum; RETURN NEW;END;$LC_TRIGGER_AFTER_INSERT_TRANSACTION$ LANGUAGE plpgsql;CREATE TRIGGER LC_TRIGGER_AFTER_INSERT_TRANSACTION AFTER INSERT ON transactions FOR EACH ROW EXECUTE PROCEDURE LC_TRIGGER_AFTER_INSERT_TRANSACTION();");
protected override void Down(MigrationBuilder migrationBuilder)
migrationBuilder.Sql("DROP TRIGGER LC_TRIGGER_AFTER_INSERT_TRANSACTION ON transactions;DROP FUNCTION LC_TRIGGER_AFTER_INSERT_TRANSACTION();");
Tal vez sea útil para alguien.
Si estás de acuerdo, tienes la habilidad dejar un tutorial acerca de qué te ha impresionado de este tutorial.