Подтвердить что ты не робот

Как создать класс, который работает с TransactionScope?

Просто интересно, если я хочу создать класс, который что-то делает, и я хочу, чтобы его можно было использовать в TransactionScope, что мне нужно реализовать?

То есть: Мой класс должен знать, что он в транзакции, но как он получит уведомление о Commit или Rollback? И в Rollback, как бы я действительно откат?

Я предполагаю, что мой класс будет иметь такие методы, как "Добавить", "Обновить" и "Удалить", которые изменяют только временный список изменений и метод "Чтение", который должен обнаруживать, находится ли он в транзакции и возвращать измененные или немодифицированные данные, но тогда мне нужен метод Commit/Rollback, который вызван каким-то образом?

Я бы подписался на событие Transaction.TransactionCompleted? Если да, как мне избежать нескольких подписки на одну транзакцию?

Я заметил, что у транзакций нет идентификаторов, есть ли способ управлять/жонглировать несколькими параллельными транзакциями или вложенными транзакциями?

Документация MSDN для System.Transactions содержит много контента, но, похоже, она нацелена на потребителей, а не на разработчиков, поэтому я задаюсь вопросом, у кого-то есть хороший источник (либо в Интернете, либо в книге) о том, как служба будет поддерживать транзакции?

Предположим, что мой класс не имеет базового хранилища, который уже поддерживает транзакции и способен просто "передать его". Предположим, что мой класс выглядит следующим образом:

public class MyClass {
    private List<MyObject> _businessData;

    public void Create(Myobject data) { ... }
    public MyObject Read(string query) { ... }
    public void Update(Myobject data) { ... }
    public void Delete(Myobject data) { ... }
}
4b9b3361

Ответ 1

В этой статье есть хороший обзор того, что требуется. Он старше, но я считаю, что все это по-прежнему применяется.

Чтобы подвести итог статьи, вам нужно вызвать один из методов Enlist в классе Transaction, передав реализацию IEnlistmentNotification.