.N .NET Landscape

FlexLabs.Upsert

Data Access
github.com/artiomchi/FlexLabs.Upsert

FlexLabs.Upsert is a library that brings UPSERT functionality to common database providers for Entity Framework in their respective native SQL syntax

GitHub stars
698
Forks
106
Open issues
36
NuGet downloads
19,913,569
latest 10.1.0
License
MIT
Language
C#
Last push
2 months ago
11 Aug 2026
Created
17 Feb 2018

FlexLabs.Upsert

Build status FlexLabs.EntityFrameworkCore.Upsert on NuGet

This 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