好的,我有一个区域,人们可以在14天内创建OpenHouse列表,然后列表已过期,应该删除,我的问题是;是否有某种方式让数据库自动删除列表?这是我下面的简单代码,但它不是最佳的
protected void Application_Start()
{
openhouse mydate= new openhouse();
if (mydate.expired > DateTime.Now)
{
db.openhouses.Remove(mydate);
}
}
正如你所知道的那样是在我的Global.asax中但是问题是如果我编译应用程序只会删除列表我认为必须有一种比我更有效的方法来做到这一点每天为此编译,任何建议都将非常感激......
答案 0 :(得分:0)
数据库本身不会为您提供任何计时器或计划任务(至少SQLLite不会)。您必须编写一个清理过期列表的任务,为此,您有几个选项:
如果您想使用第一个选项,请查看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运行。