2011-03-10 14 views
24

Solo me pregunto, si quiero crear una clase que haga algo y quiero ser utilizada en un TransactionScope, ¿qué debería implementar?¿Cómo crear una clase que funcione con TransactionScope?

Esto es: mi clase debe tener en cuenta que está en una transacción, pero ¿cómo se notificaría en Commit o Rollback? Y en Rollback, ¿cómo sería 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 llama de alguna manera?

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

Me di cuenta de que las transacciones no tienen ID, ¿hay alguna forma de gestionar/hacer malabares con múltiples transacciones concurrentes o transacciones anidadas? El MSDN Documentation for System.Transactions tiene mucho contenido pero parece estar dirigido a los consumidores en lugar de a los implementadores, entonces me pregunto si alguien tiene una buena fuente (ya sea en la web o en un libro) sobre cómo un servicio proporcionar soporte para las transacciones?

Supongamos que mi clase no tiene una tienda subyacente que ya admita transacciones y solo pueda "pasarla". Supongamos mi clase es el siguiente:

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

Respuesta

14

This article 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.

+0

Y si alguien se preguntaba, que era el enlace # 4 googlear "participar en System.Transaction" –

+1

Gracias. El artículo es una buena visión general pero no muy profunda (por ejemplo, ¿cómo sé qué transacción está siendo comprometida en caso de que dan soporte a múltiples transacciones simultáneas). Pero Resource Manager como palabra clave me ayudó a encontrar artículos como http://msdn.microsoft.com/en-us/magazine/cc163688.aspx que llenan los vacíos. –

Cuestiones relacionadas