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 { }