Я пишу веб-приложение ASP.Net MVC 3 с использованием Entity Framework 4.1. Класс «Моя единица работы» аналогичен описанному в этом превосходном учебном пособии http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
Однако вместо того, чтобы вводить мой класс UoW в мой контроллер, я делаю это в своем классе обслуживания, например
public class ListService : IListService
{
private IUnitOfWork _uow;
public ListService(IUnitOfWork uow)
{
_uow = uow;
}
public IList<List> GetAllListTypes()
{
return _uow.Lists.Get().OrderBy(l => l.description).ToList();
}
}
Класс «Моя единица работы» выглядит следующим образом
public class UnitOfWork : IUnitOfWork, IDisposable
{
readonly LocumEntities _context = new LocumEntities();
private GenericRepository<List> _lists = null;
public IGenericRepository<List> Lists
{
get
{
if (_lists == null)
{
_lists = new GenericRepository<List>(_context);
}
return _lists;
}
}
public void Commit()
{
_context.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
И все это прекрасно работает. Однако вы заметите, что в моем классе UoW есть методы для избавления от DbContext. Я хочу избавиться от класса UoW после каждой бизнес-транзакции, как это сделано в вышеупомянутом учебном пособии, они делают это, используя следующий код в своем контроллере
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
Я попытался изменить этот метод и поместить его в свой класс обслуживания, однако он не работает, т. Е. Метод dispose в классе UoW никогда не вызывается
protected override void Dispose(bool disposing)
{
_uow.Dispose();
}
Я был бы очень признателен, если бы кто-то мог указать мне правильное направление, как избавиться от моего класса UoW.
Спасибо.