diff options
| author | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-30 13:35:25 +0000 |
|---|---|---|
| committer | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-30 13:35:25 +0000 |
| commit | 674ca83ba9243a9e95a7568c797668dab6aee26a (patch) | |
| tree | 4a905b3fb1d827665a34d63f67bc5559f8e7235b /Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs | |
| download | gestor-674ca83ba9243a9e95a7568c797668dab6aee26a.tar.gz gestor-674ca83ba9243a9e95a7568c797668dab6aee26a.zip | |
feat: upload files
Diffstat (limited to 'Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs')
| -rw-r--r-- | Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs b/Gestor.Infrastructure/Gestor.Infrastructure.UnitOfWork.Generic/GenericUnitOfWork.cs new file mode 100644 index 0000000..0e0998f --- /dev/null +++ b/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 |