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
.