2011-03-10 3 views
24

Просто интересно, если я хочу создать класс, который что-то делает, и я хочу, чтобы его можно было использовать в 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) { ... } 
} 

ответ

14

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

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

+0

И если кто-то задавался вопросом, это была ссылка # 4 googling "участвует в System.Transaction" –

+1

Спасибо. Статья является хорошим обзором, но не очень глубоким (например, как узнать, какая транзакция совершается в случае поддержки нескольких параллельных транзакций). Но менеджер ресурсов в качестве ключевого слова помог мне найти статьи, такие как http://msdn.microsoft.com/en-us/magazine/cc163688.aspx, которые заполняют пробелы. –

Смежные вопросы