C# Entity Framework - Лучшая практика для проверки того, что запись будет успешно сохранена - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть часть моего кода, которая обновляет две базы данных A и B, которые используются в двух разных системах. База данных A является основной, поэтому запись не может существовать в базе данных B, если она не существует в базе данных A.

Поэтому я нашел быстрое решение для проверки успешности базы данных A с одной незначительной проблемой: столбец первичного ключа автоматически увеличивается каждый раз, когда я выполняю проверку, поэтому мой идентификатор увеличивается на 2. Это не вызывает никаких проблем, но я хотел бы найти более эффективное решение.

public void UpdateDatabases(Product model)
{
   bool verify_A = SaveDatabaseA(model, true);

   if(verify_A)
   {
      bool save_B = SaveDatabaseB(model);

      if(save_B)
      {
          bool save_A = SaveDatabaseA(model, false);

          if(save_A)
          {
              //Show notification 
          }
      }
   }
}

public bool SaveDatabaseA(Product model, bool verificationOnly = false)
{
    var result = true;

    try
    {
        using (var entities = new entities())
        {
            using (var dbContextTransaction = entities.Database.BeginTransaction())
            {
                try
                {
                    // Update code here....

                    if (!verificationOnly)
                    {
                        dbContextTransaction.Commit();
                    }

                    dbContextTransaction.Dispose();
                }
                catch (Exception ex)
                {
                     response = false;
                     dbContextTransaction.Rollback();
                     dbContextTransaction.Dispose();
                     LogErrors(ex, userID);
                }
            }
        }
   }
   catch (Exception ex)
   {
        response = false;
        LogErrors(ex, userID);
   }

   return response;
}

1 Ответ

0 голосов
/ 18 апреля 2020

Первый вызов SaveDatabaseA выполняет всю работу, но пропускает совершение транзакции. Это увеличивает свойство тождественности вашей базовой таблицы, но поскольку транзакция не зафиксирована, данные не сохраняются. Второй вызов SaveDatabaseA фиксирует транзакцию, поэтому ваша идентификационная последовательность увеличивается на 2 для каждой сохраненной записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...