.NET, Вы получаете объект транзакции?

При работе с SQL / ADO, получил меня думающий о чем-то, что я думаю, должен логически быть включен с платформой .NET, и я задавался вопросом, существует ли такая вещь, позвольте мне объяснить.

Есть ли объект, который является по существу менеджером транзакций, к которому Вы передаете команды (объекты работы), и в том же я предположил бы, что это будет необходимо, также передают действия отката для каждого объекта работы в транзакции.

Например,

Позволяет говорят, что я хотел выполнить следующие действия:

  1. Создайте папку
  2. Создайте файл в этой папке
  3. Выполните некоторые другие misc задачи как редактирование reg ключи или действительно действие, о котором можно думать, который может откатываться.

Теперь в настоящее время, если что-то перестало работать, я должен вручную реализовать список назад стратегия, поэтому возможно, путь существует для управления этими объектами работы как транзакцией с помощью oob функциональность .NET?

Мои соображения состоят в том, что это попросило бы, чтобы много имело откат объектов автоматически, но имело бы способность вручную управлять тем, что происходит во время отката на объект работы, кажется практичным.

Другая вещь - то, что Microsoft сделали с LINQ, является действительно большим, эффективно имея SQL как запросы для всех видов материала, не только для таблиц SQL. Таким образом, возможно, существует некоторая модель транзакции с LINQ?

Спасибо, если Вы знаете о чем-нибудь как это?

6
задан JL. 31 March 2010 в 21:08
поделиться

2 ответа

Вы можете использовать класс TransactionScope, чтобы начать транзакцию, но любые действия, которые вы предпринимаете внутри этой транзакции, должны быть "осведомлены о транзакции" и знать, как компенсировать, если транзакция будет откатана.

Брент ВандерМейде сделал серию из двух частей на dnrTV о том, как писать классы, которые знают о TransactionScope. Вот часть 1, а вот часть 2.

5
ответ дан 17 December 2019 в 04:44
поделиться

Обычно транзакции в этом смысле подразумевают DB IO, а не операции с файловой системой. В ADO.Net 2.0 вы должны сделать что-то вроде приведенного ниже кода.

Для других типов транзакций я бы посоветовал изучить MS DTC (координатор распределенных транзакций). Это позволит вашим транзакциям охватить разные машины, и я также считаю, что это позволяет вам включать настраиваемые действия для отката.

Надеюсь, это поможет.

using (SqlConnection connection =
            new SqlConnection(connectionString))
{
    SqlCommand command = connection.CreateCommand();
    SqlTransaction transaction = null;

    try
    {
        // BeginTransaction() Requires Open Connection
        connection.Open();

        transaction = connection.BeginTransaction();

        // Assign Transaction to Command
        command.Transaction = transaction;

        // Execute 1st Command
        command.CommandText = "Insert ...";
        command.ExecuteNonQuery();

        // Execute 2nd Command
        command.CommandText = "Update...";
        command.ExecuteNonQuery();

        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
    finally
    {
        connection.Close();
    }
} 
0
ответ дан 17 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: