2013-09-16 4 views
0

Итак, у меня есть область, где люди могут создавать списки OpenHouse в течение 14 дней, после чего срок действия истек и должен быть удален, мой вопрос: существует ли какой-либо способ автоматического удаления списков баз данных? Это простой код, который я ниже это работает, но это не является оптимальнымmvc3 Как я могу получить автоматическое окончание

protected void Application_Start() 
    { 
     openhouse mydate= new openhouse(); 
     if (mydate.expired > DateTime.Now) 
     { 
      db.openhouses.Remove(mydate); 
     } 
    } 

Что вы можете сказать в моей Global.asax, но вопрос в том, что списки только удаляются, если я скомпилировать приложение I я думаю, что должен быть более эффективный способ сделать это, чем я собираю каждый день только для этого, любые предложения будут очень оценены ...

ответ

0

Сама база данных не будет предоставлять вам какие-либо таймеры или запланированные задачи (по адресу как минимум SQLLite не будет). Вы должны запрограммировать задачу, которая очищает истекшие списки, для этого, у вас есть несколько вариантов:

  • Использование задачи по расписанию в пределах вашего собственного приложения ASP.net
  • Использование задания (отдельное приложение) по расписанию и управляемый вашим хостинг-провайдером. Если вы находитесь в облаке, у вашего облачного провайдера, скорее всего, есть возможность сделать это за вас.

Если вы хотите перейти к первому варианту, взгляните на Quartz. У меня есть WorkerRole на Azure, чем использует Quartz, чтобы делать то, что вам нужно здесь. Это довольно простой в установке, вот пример:

 // Initialize Quartz 
     ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); 
     _scheduler = schedulerFactory.GetScheduler(); 
     _scheduler.JobFactory = new NinjectJobFactory(_kernel); 

     DateTimeOffset morning = DateBuilder.NewDateInTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")) 
      .AtHourMinuteAndSecond(5, 30, 0) 
      .Build(); 

     // Schedule task for email being sent to people who have not signed up after their trial expiry 
     IJobDetail userFeedbackJobDetail = JobBuilder.Create<LostUserFeedbackRequestJob>().WithIdentity("User Feedback Emails").Build(); 
     ITrigger dailyTriggerForUserFeedback = TriggerBuilder.Create() 
      .WithIdentity("Daily Trigger (User Feedback)") 
      .StartAt(morning) 
      .WithSimpleSchedule(schedule => schedule.WithInterval(TimeSpan.FromDays(1)).RepeatForever()) 
      .ForJob(userFeedbackJobDetail) 
      .Build(); 
     _scheduler.ScheduleJob(userFeedbackJobDetail, dailyTriggerForUserFeedback); 

     // Finally, start the scheduler 
     _scheduler.Start(); 

Это посылает ежедневно по электронной почте с просьбой обратной связи от пользователей, которые не избираемых пользоваться услугами одного из моих проектов после того, как их испытательный срок закончился. Работа ведется каждый день в 5:30 утра.

+0

Большое спасибо, что идеально, я собираюсь начать с этого. – user1591668

+0

Добро пожаловать :) – Ameen

Смежные вопросы