public virtual async Task SaveAsync(IntranetDbContext context = null) { bool isExternalContext = context != null; context = context ?? DbContextAsync; try { await context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { // for cases when we trying to update entities which does not present in database. var entries = context.ChangeTracker.Entries() .Where(i => i.State == EntityState.Modified); foreach (var entry in entries) { var dbValues = await entry.GetDatabaseValuesAsync(); if (dbValues == null) { entry.State = EntityState.Added; } } await context.SaveChangesAsync(); } finally { if (!isExternalContext) { context.Dispose(); } } }