2012-03-29 67 views
1

我想统计从数据库(SQL Server)中检索某些报告的事务数量。我使用EF4.1进行数据库交互,使用MVC3进行客户端。MVC3交易计数器

任何人都可以提出最好的方式来做和放置(在控制器或在reposity服务等)。

我想限制用户每小时最多100笔交易。在这个限制之后,我会锁定用户并注销。提前致谢!!

+0

我不确定我是否理解这个问题。你想计算用户执行的查询次数,还是写入数据库的次数? – 2012-03-29 15:23:58

+0

其中任何一个。我实际上是从大型机中检索信息并在用户每次请求时将其放入SQL数据库中。所以现在我想限制用户每小时从主机(因此通过SQL)检查最多100个报告。 – Aman 2012-03-29 15:28:11

回答

1

这显然是业务逻辑,所以“行动”(决策)需要在您的业务逻辑层。

在数据库中,每天保留一个包含消耗配额的表,并在用户执行计数操作(例如检索特定报告或写入数据库)时更新该表。也就是说,您的业务逻辑包含用于更新每个此类操作使用的配额计数器的说明。

在业务层中添加验证逻辑,该验证逻辑读取用户使用的配额,并且只验证(即允许)是否未达到该用户的每日配额。

必要时每天清理配额,但您可能希望保留它以用于会计目的。

+0

那么这个配额是:每用户每小时100个。所以每次我去SQL添加报表时,我需要更新计数器以及进行该事务的时间。然后检查最近100次交易的时间?我会好吗? :) – Aman 2012-03-29 15:47:55

+0

这取决于你如何定义“每小时”。它恰好在1和2之间,然后又在2和3之间,还是每60分钟有100个报告?然后简单地检索最近60分钟内消耗的物品数量(因此时间戳小于60分钟)。如果数量少于100,您可以允许交易通过。当事务通过时(在业务逻辑中),它将该交易日记录在该表中。 – 2012-03-29 16:04:06

+1

这是每60分钟100个报告。所以我需要添加新的表来记录每个用户的每个transanction的report-id和date-time。我正在更新用户创建新事务后的报表,因此无法使用报表计数.. – Aman 2012-03-29 16:15:18

1

我可能会看在一个ActionFilterAttribute可以在MvcApplication类,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

+0

我也是ActionFilters的忠实粉丝。但我不能在这里使用它似乎。我会尝试在检索报告期间在新表格中记录时间。 – Aman 2012-03-29 16:17:52