У меня есть сайт MVC 3, который использует IoC (Unity), и моя модель создается с EF4 и POCO. Я использую фильтр действий, чтобы зафиксировать свой UnitOfWork:
public class UseUnitOfWorkAttribute : ActionFilterAttribute, IActionFilter
{
private readonly IUnitOfWork _unitOfWork;
public UseUnitOfWorkAttribute()
{
_unitOfWork = IoCFactory.Instance.CurrentContainer.Resolve<IUnitOfWork>();
}
void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
{
_unitOfWork.Commit();
}
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
}
}
Однако, несмотря на то, что Commit()
, кажется, увольняется, он каким-то образом кэширует то, что считает «грязным».
Например, в моем контроллере из класса обслуживания выполняется следующее:
var user = _userRepository.Single(u => u.Id == 2);
user.DateAdded = DateTime.Now;
Всякий раз, когда я делаю новую сборку решения и нажимаю это действие контроллера, изменение фактически фиксируется. Однако последовательные обращения к контроллеру ничего не делают.
С другой стороны, если я помещаю UnitOfWork в свой контроллер и фиксирую его после вызова метода службы, он работает так, как ожидалось (каждый раз, когда я запрашиваю действие контроллера):
public AccountController()
{
_unitOfWork = IoCFactory.Instance.CurrentContainer.Resolve<IUnitOfWork>();
}
public ActionResult Test()
{
var user = _userRepository.Single(u => u.Id == 2);
user.DateAdded = DateTime.Now;
_unitOfWork.Commit();
}
Таким образом, определенно кажется, что происходит какое-то кеширование, но я не могу понять, что кешируется — UnitOfWork, ActionFilter или репозиторий.
Любые идеи, что может происходить? И если нет, какие идеи еще я мог бы сделать, чтобы устранить неполадки?
Заранее спасибо.