У меня есть сайт 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 или репозиторий.
Есть идеи, что может быть продолжается? А если нет, есть идеи, что еще я могу сделать для устранения неполадок?
Заранее спасибо.