C# EF Конкурентные обновления в базе данных

Поделиться
HTML-код
  • Опубликовано: 21 окт 2024

Комментарии • 8

  • @prtrtp4706
    @prtrtp4706 2 месяца назад +1

    Супер! Спасибо, оч круто, то что нужно

  • @andreibenkov4339
    @andreibenkov4339 2 года назад

    Спасибо. Хорошо и доступно объяснил.

  • @ramilnuftiev8637
    @ramilnuftiev8637 6 месяцев назад

    Большое спасибо, очень полезное видео. Как сделать в Efcore for update skip locked? и есть ли nuget расширение для PostgreSql?

  • @johnsnow2810
    @johnsnow2810 2 года назад

    Спасибо, отличное объяснение. Не хватает только демонстрации того как отработали решения с повторами и хинтами. Я имею в виду не бенчмарк, а суммы товаров при параллельном запуске.

    • @itchatter
      @itchatter  2 года назад

      В примере мы увеличивали число ста разных товаров на единичку. А проверяли сумму позже, чтобы убедиться что всё обновилось корректно.

    • @itchatter
      @itchatter  2 года назад

      // Политика повторов через Polly
      readonly RetryPolicy _concurrencyExceptionRetryPolicy = Policy
      .Handle()
      .Retry(
      retryCount: 100,
      onRetry: (exceptiona, b) =>
      {
      Interlocked.Increment(ref RetryCounter);
      });
      // Обновление с использованием политики
      _concurrencyExceptionRetryPolicy.Execute(() =>
      {
      using var db = GetDbContext();
      var company = GetRandomSKU();
      var value = db.WarehousesWithConcurrencyCheck
      .First(i => i.SKU == company);
      value.Amount++;
      db.SaveChanges();
      });
      // И проверка сумм примерно так
      public void ShowResultWithoutConcurrencyCheck()
      {
      var db = GetDbContext();
      var value = db.Warehouses.Select(i => i.Amount).Sum();
      Console.WriteLine($"A:{value}");
      if (value != 100) Console.WriteLine("Error!!!!");
      }
      P.S. Код не выкладывал - он не красивый и мне за него чуток стыдно :-)

  • @ictcorp
    @ictcorp 2 года назад

    Хорошо рассказал, доступно. Спасибо