From 04b085b2ec8c508778eba4a8efbb4cc8a4e50239 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Fri, 10 Jun 2022 17:30:42 +0500 Subject: [PATCH] Add upsert methods to EF. Not optimized implementation. --- AsbCloudDb/EFExtentions.cs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/AsbCloudDb/EFExtentions.cs b/AsbCloudDb/EFExtentions.cs index 7c0e588a..d43d9b56 100644 --- a/AsbCloudDb/EFExtentions.cs +++ b/AsbCloudDb/EFExtentions.cs @@ -49,6 +49,32 @@ namespace AsbCloudDb var factory = GetQueryStringFactory(dbSet); return factory.Columns; } + + public static Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry Upsert(this DbSet dbSet, T value) + where T : class + { + return dbSet.Contains(value) + ? dbSet.Update(value) + : dbSet.Add(value); + } + + public static (int updated, int inserted) UpsertRange(this DbSet dbSet, IEnumerable values) + where T : class + { + (int updated, int inserted) stat = (0,0); + foreach (var value in values) + if (dbSet.Contains(value)) + { + stat.updated++; + dbSet.Update(value); + } + else + { + stat.inserted++; + dbSet.Add(value); + } + return stat; + } } interface IQueryStringFactory { }