FlexLabs.EntityFrameworkCore.Upsert
8.1.2
Prefix Reserved
See the version list below for details.
dotnet add package FlexLabs.EntityFrameworkCore.Upsert --version 8.1.2
NuGet\Install-Package FlexLabs.EntityFrameworkCore.Upsert -Version 8.1.2
<PackageReference Include="FlexLabs.EntityFrameworkCore.Upsert" Version="8.1.2" />
<PackageVersion Include="FlexLabs.EntityFrameworkCore.Upsert" Version="8.1.2" />
<PackageReference Include="FlexLabs.EntityFrameworkCore.Upsert" />
paket add FlexLabs.EntityFrameworkCore.Upsert --version 8.1.2
#r "nuget: FlexLabs.EntityFrameworkCore.Upsert, 8.1.2"
#:package FlexLabs.EntityFrameworkCore.Upsert@8.1.2
#addin nuget:?package=FlexLabs.EntityFrameworkCore.Upsert&version=8.1.2
#tool nuget:?package=FlexLabs.EntityFrameworkCore.Upsert&version=8.1.2
FlexLabs.Upsert
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
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.0)
NuGet packages (16)
Showing the top 5 NuGet packages that depend on FlexLabs.EntityFrameworkCore.Upsert:
| Package | Downloads |
|---|---|
|
FenixAlliance.ACL.Dependencies
Application Component for the Alliance Business Suite. |
|
|
HwApp.Core
HwApp Core |
|
|
Elsa.Persistence.EntityFrameworkCore
Elsa is a set of workflow libraries and tools that enable super-fast workflowing capabilities in any .NET Core application. This package provides an Entity Framework Core persistence provider. |
|
|
TickerQ.EntityFrameworkCore
Entity Framework Core integration for scheduling and persisting cron/time-based jobs using TickerQ. |
|
|
QuantFi.Services
Package Description |
GitHub repositories (3)
Showing the top 3 popular GitHub repositories that depend on FlexLabs.EntityFrameworkCore.Upsert:
| Repository | Stars |
|---|---|
|
Reaparr/Reaparr
Plex downloader that brings content from any server to yours!
|
|
|
Texnomic/SecureDNS
Secure, Modern, Fully-Featured, All-In-One Cross-Architecture & Cross-Platform DNS Server Using .NET 8.0
|
|
|
Kukks/NNostr
A Nostr Relay and Client written in C#
|
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 10.0.0-beta1 | 1,639 | 11/5/2025 | |
| 9.101.0 | 8,731 | 11/4/2025 | |
| 9.100.1 | 42,092 | 9/17/2025 | |
| 9.100.0 | 25,985 | 8/30/2025 | |
| 9.0.0 | 336,223 | 3/3/2025 | |
| 8.1.2 | 621,699 | 11/28/2024 | |
| 8.1.0 | 20,649 | 11/24/2024 | |
| 8.0.0 | 2,068,383 | 12/3/2023 | |
| 7.0.0 | 1,132,980 | 12/18/2022 | |
| 7.0.0-beta.2 | 6,485 | 11/22/2022 | |
| 7.0.0-beta.1 | 544 | 11/16/2022 | |
| 6.0.2 | 592,029 | 11/16/2022 | |
| 6.0.1 | 4,791,919 | 1/2/2022 | |
| 6.0.0-preview5 | 58,971 | 7/11/2021 | |
| 5.1.0 | 69,951 | 1/2/2022 | |
| 5.0.0 | 384,756 | 7/11/2021 | |
| 4.0.1 | 43,678 | 7/11/2021 | |
| 4.0.0 | 393,254 | 3/2/2021 | |
| 3.1.0 | 2,502,969 | 1/26/2020 | |
| 3.0.0 | 110,126 | 9/29/2019 | |
| 3.0.0-netcore3-00140 | 3,812 | 8/11/2019 | |
| 2.2.1 | 112,510 | 9/17/2019 | |
| 2.2.0 | 45,499 | 8/11/2019 | |
| 2.1.2 | 93,489 | 5/22/2019 | |
| 2.1.1 | 2,835 | 5/21/2019 | |
| 2.1.0 | 3,387 | 5/19/2019 | |
| 2.0.7 | 54,729 | 3/18/2019 | |
| 2.0.6 | 11,829 | 2/6/2019 | |
| 2.0.5 | 18,149 | 1/25/2019 | |
| 2.0.4 | 9,220 | 1/3/2019 | |
| 2.0.3 | 7,659 | 12/18/2018 | |
| 2.0.2 | 12,981 | 11/3/2018 | |
| 2.0.1 | 3,195 | 10/24/2018 | |
| 2.0.0 | 11,782 | 9/19/2018 | |
| 1.1.0 | 2,788 | 9/19/2018 | |
| 1.0.4 | 14,941 | 3/10/2018 | |
| 1.0.3 | 3,233 | 2/23/2018 | |
| 1.0.2 | 2,929 | 2/20/2018 | |
| 1.0.1 | 3,108 | 2/19/2018 | |
| 1.0.0 | 8,296 | 2/18/2018 |
v8.1.0
+ Adding initial support for Oracle DB! (Thanks to @dadyarri)
+ Adding test support for returning inserted objects (Thanks to @PhenX)
+ Adding support for upserting into views (ymmv)
! Patching argument count calculation (for max argument count handling)
! Patching null constant handling in the update condition
v8.0.0
+ Adding support for EF Core 8
v7.0.0
+ Adding support for EF Core 7
v6.0.2
* Improving entity type detection when using DbSet<>
! Patching MySQL handling of null columns
v6.0.0
+ Adding support for EF Core 6
+ Handling UseIdentityAlwaysColumn columns
v5.0.0
! Fixing the library versioning. From now one, one version of the library depends on one version of EF Core, for all supported target frameworks
v4.0.1
! Patching some MySql conditional update queries
v4.0.0
+ Adding support for .NET 5 and EF Core 5
! Patched support for constants in the update condition
! Run and RunAsync will not return all rows affected when command was split into multiple batches, not just the last batch's row count
! Patching the extension method to replace/inject custom command runner
! Removed old extension method on IServiceCollection, since it wasn't working anyway