public async Task <int> AddAsync(T entity, CancellationToken token = default) { await Set.AddAsync(entity, token); _logger.LogInformation("Объект {0} добавлен в базу", entity); await _db.SaveChangesAsync(token).ConfigureAwait(false); return(entity.Id); }
private async Task InitializeHardwaresData(CancellationToken cancel = default) { if (await _db.Hardwares.AnyAsync(cancel).ConfigureAwait(false)) { _logger.LogInformation("Заполнение базы данных не требуется"); return; } // await нужен, т.к. BeginTransactionAsync возвращает DbTransaction с интерфейсом IAsyncDisposable !!! await using var transaction = await _db.Database.BeginTransactionAsync(cancel).ConfigureAwait(false); _logger.LogInformation("Заполнение таблицы {0}...", nameof(_db.Hardwares)); var sw = Stopwatch.StartNew(); var hardwares = Enumerable.Range(1, 10).Select(index => new Hardware { Name = $"Оборудование - {index}", Description = $"Конфигурация оборудования - {index}", Cost = Random.Shared.Next(10, 100) * 1000, InstallationDate = DateTime.Today.AddYears(-Random.Shared.Next(2, 7)) }); await _db.Hardwares.AddRangeAsync(hardwares, cancel).ConfigureAwait(false); await _db.SaveChangesAsync(cancel).ConfigureAwait(false); sw.Stop(); _logger.LogInformation("Таблица {0} заполнена за {1} мс", nameof(_db.Hardwares), sw.ElapsedMilliseconds); await transaction.CommitAsync(cancel).ConfigureAwait(false); }