コード例 #1
0
ファイル: Repository.cs プロジェクト: orlfi/GeekBrains
    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);
    }
コード例 #2
0
    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);
    }