У меня есть сайт MVC 3, в котором используется IoC (Unity), и моя модель сгенерирована с помощью EF4 и POCOs. Я использую фильтр действий для фиксации моего 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 или репозиторий.
Любые идеи, что может быть? И если нет, какие-нибудь идеи, что еще я могу сделать для устранения неполадок?
Спасибо заранее.