transaction framework ejemplo begintransaction c# .net .net-4.0 transactions system.transactions

c# - framework - ¿Cómo crear una clase que funcione con TransactionScope?



transactionscope vb (1)

Solo me pregunto, si quiero crear una clase que haga algo y quiero poder ser utilizado en un TransactionScope, ¿qué necesitaría implementar?

Es decir: mi clase debe ser consciente de que está en una transacción, pero ¿cómo se le notificará en Commit o Rollback? Y en Rollback, ¿cómo realmente Rollback?

Supongo que mi clase tendría métodos como "Agregar", "Actualizar" y "Eliminar" que solo modifican una lista temporal de cambios, y un método "Leer" que necesita detectar si está en una transacción y devolver datos modificados o no modificados en consecuencia, pero luego necesito un método Commit / Rollback que se llame de alguna manera?

¿Me suscribo al evento Transaction.TransactionCompleted? En caso afirmativo, ¿cómo evito múltiples suscripciones a la misma transacción?

Noté que las Transacciones no tienen ID, ¿hay alguna forma de administrar / hacer malabares con múltiples transacciones concurrentes o anidadas?

La Documentación de MSDN para System.Transactions tiene mucho contenido, pero parece estar dirigida a los consumidores en lugar de a los implementadores, por lo que me pregunto si alguien tiene una buena fuente (ya sea en la web o en un libro) sobre cómo un servicio proporcionaría soporte. para transacciones?

Supongamos que mi Clase no tiene una tienda subyacente que ya admita transacciones y que solo pueda "pasarla". Asumamos que mi clase se ve así:

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) { ... } }


Este artículo tiene una buena visión general de lo que se requiere. Es más viejo, pero creo que todo sigue siendo válido.

Para resumir el artículo, debe llamar a uno de los métodos Enlist en la clase Transaction , pasando una implementación de IEnlistmentNotification .