2012-03-29 2 views
1

Я хочу подсчитать количество транзакций, которые извлекают некоторые отчеты из базы данных (SQL Server). Я использую EF4.1 для взаимодействия с базами данных и MVC3 для клиента.MVC3 Сделки Счета

Может ли кто-нибудь предложить лучший способ сделать и разместить (в контроллере или в службе репозитория и т. Д.).

Я хочу ограничить пользователя максимум 100 транзакций в час. После этого ограничения я также заблокировал пользователя и вышел из системы. Заранее спасибо!!

+0

Я не уверен, что понял вопрос. Вы хотите подсчитать количество запросов пользователя или количество записей в БД? –

+0

любой из них. Я действительно получаю информацию с мейнфрейма и помещаю его в базу данных SQL каждый раз, когда пользователь что-то запрашивает. Поэтому теперь я хочу ограничить пользователя проверять максимум 100 отчетов с мэйнфрейма (таким образом, SQL) в час. – Aman

ответ

1

Это, безусловно, бизнес-логика, поэтому «действие» (решение) должно быть в вашем бизнес-логическом уровне.

В БД хранить таблицу с потребляемой квотой в день и обновлять эту таблицу каждый раз, когда пользователь выполняет подсчитанное действие (например, получение конкретного отчета или запись в базу данных). То есть ваша бизнес-логика содержит инструкции по обновлению потребляемого счетчика квот на такую ​​операцию.

Добавить логику проверки на бизнес-уровне, которая считывает потребляемую квоту для пользователя, и только подтверждать (то есть разрешать), если ежедневная квота для этого пользователя не была достигнута.

Очищайте квоту каждый день, если необходимо, но вы можете сохранить ее для целей бухгалтерского учета.

+0

ну эта квота составляет: 100 на пользователя в час. Поэтому каждый раз, когда я перехожу к SQL для добавления отчета, мне нужно обновить счетчик, а также время, в которое эта транзакция будет выполнена. Затем проверить время на последние 100 транзакций? Я иду хорошо? :) – Aman

+0

Это зависит от того, как вы определяете «в час». Это точно между 1 и 2, затем снова между 2 и 3, или это 100 отчетов за 60 минут? Затем просто загрузите количество потребляемых товаров за последние 60 минут (так, где отметка времени составляет менее 60 минут). Если число меньше 100, вы можете разрешить транзакцию. Когда транзакция проходит (в бизнес-логике), она регистрирует трансацитон в этой таблице. –

+1

100 сообщений за 60 минут. Поэтому мне нужно добавить новую таблицу для записи отчета-идентификатора и даты-даты для каждого трансантракта для каждого пользователя. Я обновляю таблицу отчетов после того, как пользователь делает новую транзакцию, поэтому не может использовать подсчет отчетов. – Aman

1

Я бы, вероятно, посмотрел на 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

+0

Я также большой поклонник ActionFilters. Но я не могу использовать его здесь, похоже. Я бы попытался записать время на новую таблицу во время поиска отчета. – Aman