我想要计算从数据库(SQL Server)检索某些报告的事务数。我使用EF4.1进行数据库交互,使用MVC3进行客户端交互。
谁能建议最好的方式做和放置(在控制器或仓库服务等)。
我想将用户限制在每小时最多100个事务。超过此限制后,我将锁定用户并注销。提前感谢!!
发布于 2012-03-29 23:32:25
这显然是业务逻辑,因此“操作”(决策)需要在您的业务逻辑层。
在数据库中,保留一个包含每天消耗配额的表,并在用户每次执行计数操作(如检索特定报告或写入数据库)时更新该表。也就是说,您的业务逻辑包含用于更新每个此类操作的消耗配额计数器的指令。
在您的业务层添加验证逻辑,读取用户的消耗配额,并仅在未达到该用户的每日配额时进行验证(即,允许)。
如果有必要,每天清理配额,但您可能希望保留它,以便进行会计处理。
发布于 2012-03-29 23:31:53
我可能会查看可以在MvcApplication类中全局(跨所有控制器)应用的ActionFilterAttribute,即RegisterGlobalFilters方法。类似于:
public class FilterTrafficAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Log and track visitor count for the hour here, and decide if they
// should proceed on or not.
// You can also change the ActionResult of the request by altering the
// filterContext.Result.
}
}然后在MvcApplication中
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandlerErrorAttribute());
// add this line:
filters.Add(new FilterTrafficAttribute());
}然后你就可以确保它适用于所有的呼叫,并且有很强的处理能力。您可能会对ActionFilterAttribute中的其他覆盖感兴趣
https://stackoverflow.com/questions/9928443
复制相似问题