mvc3我怎么能有自动过期

时间:2013-09-16 23:18:58

标签: asp.net-mvc-3 compilation

好的,我有一个区域,人们可以在14天内创建OpenHouse列表,然后列表已过期,应该删除,我的问题是;是否有某种方式让数据库自动删除列表?这是我下面的简单代码,但它不是最佳的

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

正如你所知道的那样是在我的Global.asax中但是问题是如果我编译应用程序只会删除列表我认为必须有一种比我更有效的方法来做到这一点每天为此编译,任何建议都将非常感激......

1 个答案:

答案 0 :(得分:0)

数据库本身不会为您提供任何计时器或计划任务(至少SQLLite不会)。您必须编写一个清理过期列表的任务,为此,您有几个选项:

  • 使用您自己的ASP.net应用程序中安排的任务
  • 使用托管服务提供商安排和管理的任务(单独的应用程序)。如果您在云端,云提供商很可能有能力为您执行此操作。

如果您想使用第一个选项,请查看Quartz。我在Azure上有一个WorkerRole而不是使用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运行。