Adds basic support for "Upsert" operations to EF Core. Uses `INSERT … ON CONFLICT DO UPDATE` in PostgreSQL/Sqlite, `MERGE` in SqlServer and `INSERT INTO … ON DUPLICATE KEY UPDATE` in MySQL. Also supports injecting sql command generators to add support for other providers
$ dotnet add package FlexLabs.EntityFrameworkCore.UpsertThis library adds basic support for "Upsert" operations to EF Core.
Uses INSERT … ON CONFLICT DO UPDATE in PostgreSQL/Sqlite, MERGE in SqlServer & Oracle and INSERT INTO … ON DUPLICATE KEY UPDATE in MySQL.
Also supports injecting sql command runners to add support for other providers
A typical upsert command could look something like this:
DataContext.DailyVisits
.Upsert(new DailyVisit
{
UserID = userID,
Date = DateTime.UtcNow.Date,
Visits = 1,
})
.On(v => new { v.UserID, v.Date })
.WhenMatched(v => new DailyVisit
{
Visits = v.Visits + 1,
})
.RunAsync();
In this case, the upsert command will ensure that a new DailyVisit will be added to the database. If a visit with the same UserID and Date already exists, it will be updated by incrementing it's Visits value by 1.
Please read our Usage page for more examples