diff --git a/AsbCloudInfrastructure/Services/Cache/CacheTable.cs b/AsbCloudInfrastructure/Services/Cache/CacheTable.cs index a0c37248..1856acd5 100644 --- a/AsbCloudInfrastructure/Services/Cache/CacheTable.cs +++ b/AsbCloudInfrastructure/Services/Cache/CacheTable.cs @@ -206,7 +206,11 @@ namespace AsbCloudInfrastructure.Services.Cache public async Task UpsertAsync(TEntity entity, CancellationToken token = default) { var dbSet = context.Set(); - var updated = dbSet.Update(entity); + Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry updated; + if (dbSet.Contains(entity)) + updated = dbSet.Update(entity); + else + updated = dbSet.Add(entity); await context.SaveChangesAsync(token).ConfigureAwait(false); await RefreshAsync(token).ConfigureAwait(false); return updated.Entity; @@ -217,7 +221,14 @@ namespace AsbCloudInfrastructure.Services.Cache var dbSet = context.Set(); var upsertedEntries = new List(entities.Count()); foreach (var entity in entities) - upsertedEntries.Add(dbSet.Update(entity).Entity); + { + Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry updated; + if (dbSet.Contains(entity)) + updated = dbSet.Update(entity); + else + updated = dbSet.Add(entity); + upsertedEntries.Add(updated.Entity); + } context.SaveChanges(); Refresh(); return upsertedEntries; @@ -228,7 +239,14 @@ namespace AsbCloudInfrastructure.Services.Cache var dbSet = context.Set(); var upsertedEntries = new List(entities.Count()); foreach (var entity in entities) - upsertedEntries.Add(dbSet.Update(entity).Entity); + { + Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry updated; + if (dbSet.Contains(entity)) + updated = dbSet.Update(entity); + else + updated = dbSet.Add(entity); + upsertedEntries.Add(updated.Entity); + } await context.SaveChangesAsync(token).ConfigureAwait(false); await RefreshAsync(token).ConfigureAwait(false); return upsertedEntries;