gpt4 book ai didi

asp.net-mvc - Action Filter 中的 UnitOfWork 似乎正在缓存

转载 作者:行者123 更新时间:2023-12-02 07:45:23 26 4
gpt4 key购买 nike

我有一个使用 IoC (Unity) 的 MVC 3 站点,我的模型是使用 EF4 和 POCO 生成的。我正在使用操作过滤器来提交我的工作单元:

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() 似乎被解雇了,但它似乎在缓存它认为“脏”的内容。

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

var user = _userRepository.Single(u => u.Id == 2);
user.DateAdded = DateTime.Now;

每当我重新构建解决方案并点击此 Controller 操作时,更改实际上已提交。但是,连续点击 Controller 不会执行任何操作。

另一方面,如果我将 UnitOfWork 放入 Controller 中并在服务方法调用之后提交它,它就会按预期工作(每次我请求 Controller 操作时):

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 或存储库。

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

提前致谢。

最佳答案

您正在操作过滤器的构造函数中初始化您的工作单元,这意味着在实例化操作过滤器时它将被注入(inject)。引用自ASP.NET MVC 3 release notes :

In previous versions of ASP.NET MVC, action filters were created per request except in a few cases. This behavior was never a guaranteed behavior but merely an implementation detail and the contract for filters was to consider them stateless. In ASP.NET MVC 3, filters are cached more aggressively. Therefore, any custom action filters which improperly store instance state might be broken.

关于asp.net-mvc - Action Filter 中的 UnitOfWork 似乎正在缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com