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