Как создать класс, который работает с TransactionScope?
Просто интересно, если я хочу создать класс, который что-то делает, и я хочу, чтобы его можно было использовать в TransactionScope, что мне нужно реализовать?
То есть: мой класс должен знать, что он находится в транзакции, но как он будет получать уведомления о коммите или откате? И на Откат, как бы я на самом деле Откат?
Я предполагаю, что мой класс будет иметь такие методы, как "Добавить", "Обновить" и "Удалить", которые изменяют только временный список изменений, и метод "Чтение", который должен определить, находится ли он в транзакции, и вернуть измененные или неизмененные данные. соответственно, но тогда мне нужен метод 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) { ... }
}
1 ответ
Эта статья имеет хороший обзор того, что требуется. Это старше, но я верю, что это все еще применяется.
Чтобы подвести итог статьи, нужно позвонить одному из Enlist
методы класса Transaction, передавая реализацию IEnlistmentNotification
,