Introducción

El modelo ACID de las bases de datos tiene como primer principio la atomicidad, este asegura que una operación se ha realizado o no. Se dice que es atómica cuando es imposible para otra parte de un sistema encontrar pasos intermedios. Si una transacción tiene éxito, todas las modificaciones de los datos realizados de la transacción se confirman, y se convierten en una parte permanente de la base de datos. Si una transacción por lo contrario encuentra errores, se borrarán todas las modificaciones de los datos realizadas hasta el momento.

https://www.flickr.com/photos/169965099@N03/47867369411/in/dateposted-public/

Para mostrar el funcionamiento de las transacciones haremos una aplicación que consistirá en una simple base de datos de una tabla con 3 campos (ID, Nombre, Dinero), con un botón para transferir dinero de una cuenta a otra. Se podrá transferir dinero de una a otra siempre y cuando quede dinero en la cuenta. En el momento en que se quede a 0, un disparador programado en la base de datos no dejará sacar más.

https://www.flickr.com/photos/169965099@N03/33990060028/in/dateposted-public/

Lo primero será crear la base de datos con Microsoft SQL Management Studio. Hacemos un create table de la tabla cuentas con campos (id, nombre, dinero). Y a continuación insertaremos las 2 filas Jose y Carlos con 100 de dinero ambos.

Y por último creamos el Trigger

https://www.flickr.com/photos/169965099@N03/33990096938/in/dateposted-public/

En el Visual Studio creamos una aplicación .NET Core, le agregamos el NuGet de Entity Framework

Mapeo la tabla cuentas con la clave primaria id nombre y dinero.

Añado la cadena de conexión a la base de datos al fichero appsettings.json.

Creo una interfaz para el contexto con DbSet de cuentas y un DataBaseFacade que permite acceder a las propiedades de la base de datos como los triggers.

Creo la clase Cuentas context que hereda de DbContext, e implementa la interfaz, en ella incluyo el método savechanges y el DbSet.

En la clase Startup defino la cadena que tira de appsettings y resuelvo la inyección de dependencias.

Creo la interfaz IRepository declarando los métodos GetCuentas y Traspaso y en la clase Repository cuentas implemento la interfaz con un método GetCuenta para usarlo en el método de traspaso.

https://www.flickr.com/photos/169965099@N03/46951169975/in/dateposted-public/

El método traspaso es el que va a utilizar las transacciones. En el creo String vació para devolverlo como resultado. Hacemos using de IDbContextTransaction, para usar el método BeginTransaction intento restar de la cuenta 1 y sumárselo a la cuenta 2 y en caso de dar algún error o disparar el trigger hará Rollback y nos informará que «El traspaso fracasó».

https://www.flickr.com/photos/169965099@N03/47078109564/in/dateposted-public/

Autor: Jesús Bereguiain Porras

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2018-2019

Código:https://github.com/jberetajamar/routingmvc

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.