相关疑难解决方法(0)

ActionOfWork in Action Filter似乎是缓存

我有一个使用IoC(Unity)的MVC 3站点,我的模型是用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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,即使Commit()似乎被解雇了,它似乎在某种程度上缓存了它认为"肮脏"的东西.

例如,在我的控制器中,以下内容从服务类执行:

var user = _userRepository.Single(u => u.Id == 2);
user.DateAdded = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

每当我重新构建解决方案并点击此控制器操作时,实际上都会提交更改.但是,对控制器的连续命中不会做任何事情.

另一方面,如果我将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();
}
Run Code Online (Sandbox Code Playgroud)

所以看起来肯定会出现某种缓存,但我无法弄清楚缓存的内容 - UnitOfWork,ActionFilter或存储库.

什么想法可能会发生什么?如果没有,任何想法我还能做些什么来排除故障?

提前致谢.

asp.net-mvc caching inversion-of-control unit-of-work action-filter

12
推荐指数
2
解决办法
2856
查看次数