summaryrefslogtreecommitdiff
path: root/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic
diff options
context:
space:
mode:
authorLucas Faria Mendes <lucas.fariamo08@gmail.com>2026-03-30 13:38:18 +0000
committerLucas Faria Mendes <lucas.fariamo08@gmail.com>2026-03-30 13:38:18 +0000
commit1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 (patch)
treee1c3b20ea08f0cf71122a1e73f0d395f8fd83874 /Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic
parent674ca83ba9243a9e95a7568c797668dab6aee26a (diff)
downloadgestor-1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1.tar.gz
gestor-1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1.zip
chore: location
Diffstat (limited to 'Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic')
-rw-r--r--Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs148
-rw-r--r--Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/IGenericUnitOfWork.cs19
2 files changed, 167 insertions, 0 deletions
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<TEntity> Query<TEntity>()
+ where TEntity : class
+ {
+ return this.Session.Query<TEntity>();
+ }
+
+ public IGenericRepository<TEntity> Repository<TEntity>()
+ where TEntity : class
+ {
+ return new GenericRepository<TEntity>(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<TEntity> Query<TEntity>()
+ where TEntity : class;
+
+ IGenericRepository<TEntity> Repository<TEntity>()
+ where TEntity : class;
+
+ void Rollback();
+ }
+} \ No newline at end of file