From 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:38:18 -0300 Subject: chore: location --- .../GenericUnitOfWork.cs | 148 +++++++++++++++++++++ .../IGenericUnitOfWork.cs | 19 +++ 2 files changed, 167 insertions(+) create mode 100644 Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs create mode 100644 Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/IGenericUnitOfWork.cs (limited to 'Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic') diff --git a/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs new file mode 100644 index 0000000..0e0998f --- /dev/null +++ b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs @@ -0,0 +1,148 @@ +using Gestor.Infrastructure.Configuration; +using Gestor.Infrastructure.Repository.Generic; +using NHibernate; +using NHibernate.Linq; +using System; +using System.Data; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace Gestor.Infrastructure.UnitOfWork.Generic +{ + public class GenericUnitOfWork : IDisposable, IGenericUnitOfWork + { + public bool HasSession + { + get + { + return this.Session != null; + } + } + + public ISession Session + { + get; + } + + private ITransaction Transaction + { + get; + } + + protected GenericUnitOfWork(string connectionString, bool withTransaction = true) + { + bool state; + ITransaction transaction; + int num = 0; + while (true) + { + if (num < 3) + { + try + { + this.Session = SessionFactory.OpenSession(connectionString); + if (withTransaction) + { + ISession session = this.Session; + if (session != null) + { + transaction = session.BeginTransaction(IsolationLevel.ReadUncommitted); + } + else + { + transaction = null; + } + this.Transaction = transaction; + } + else if (this.Session != null) + { + ISession session1 = this.Session; + if (session1 != null) + { + state = session1.Connection.State != ConnectionState.Open; + } + else + { + state = true; + } + if (state) + { + this.Session.Connection.Open(); + } + } + break; + } + catch (ArgumentNullException argumentNullException) + { + throw; + } + catch (Exception exception) + { + if (SessionFactory.Retry) + { + Thread.Sleep(1000); + } + else + { + this.Session = null; + break; + } + } + num++; + } + else + { + this.Session = null; + break; + } + } + } + + public void Commit() + { + if (this.Transaction != null && this.Transaction.IsActive) + { + this.Transaction.Commit(); + } + } + + public void Dispose() + { + ISession session = this.Session; + if (session != null) + { + session.Dispose(); + } + else + { + } + ITransaction transaction = this.Transaction; + if (transaction == null) + { + return; + } + transaction.Dispose(); + } + + public IQueryable Query() + where TEntity : class + { + return this.Session.Query(); + } + + public IGenericRepository Repository() + where TEntity : class + { + return new GenericRepository(this.Session); + } + + public void Rollback() + { + if (this.Transaction != null && this.Transaction.IsActive) + { + this.Transaction.Rollback(); + } + } + } +} \ No newline at end of file diff --git a/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/IGenericUnitOfWork.cs b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/IGenericUnitOfWork.cs new file mode 100644 index 0000000..a131045 --- /dev/null +++ b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/IGenericUnitOfWork.cs @@ -0,0 +1,19 @@ +using Gestor.Infrastructure.Repository.Generic; +using System; +using System.Linq; + +namespace Gestor.Infrastructure.UnitOfWork.Generic +{ + public interface IGenericUnitOfWork + { + void Commit(); + + IQueryable Query() + where TEntity : class; + + IGenericRepository Repository() + where TEntity : class; + + void Rollback(); + } +} \ No newline at end of file -- cgit v1.2.3