Wrzucam Ci kod z mojej aplikacji:
public interface IUnitOfWork: IDisposable
{
void Committ();
}
namespace Domain.Repositories
{
using global::Domain.Interfaces;
using NHibernate;
public class UnitOfWork: IUnitOfWork
{
private readonly ISession session;
private ITransaction transaction;
bool disposed = false;
public UnitOfWork(ISession session)
{
this.session = session;
this.transaction = session.BeginTransaction();
}
public void Committ()
{
if (!this.transaction.IsActive)
{
throw new Exception();
}
this.transaction.Commit();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool a)
{
if (disposed)
return;
if (a)
{
this.transaction.Dispose();
this.transaction = null;
}
disposed = true;
}
~UnitOfWork()
{
Dispose(false);
}
}
}
Potem w global.asax mapuje sobie interfejs do klasy.
Konstruktor przykładowej klasy (Dependency Injection sobie robie):
private readonly IUnitOfWork unitOfWork;
public AdminController(
IUnitOfWork unit)
{
this.unitOfWork = unit;
}
i przykładowe wykorzystanie:
if (ModelState.IsValid)
{
// jakiś kod
unitOfWork.Committ();
}