0

わかりましたので、人々が OpenHouse リストを 14 日間作成できるエリアがあります。その後、リストは期限切れになり、削除する必要があります。私の質問は次のとおりです。データベースにリストを自動的に削除させる方法はありますか? これは私が下に持っている簡単なコードですが、動作しますが、最適ではありません

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

あなたが言うことができるように、私のGlobal.asaxにありますが、問題は、私がアプリケーションをコンパイルした場合にのみリストが削除されることです。そのためだけに毎日コンパイルするよりも、これを行うためのより効率的な方法があるに違いないと考えています。非常に高く評価されます...

4

1 に答える 1

0

データベース自体は、タイマーやスケジュールされたタスクを提供しません (少なくとも SQLLite は提供しません)。期限切れのリストをクリーンアップするタスクをプログラムする必要があります。そのためには、いくつかのオプションがあります。

  • 独自の ASP.net アプリケーション内でスケジュールされたタスクを使用する
  • ホスティング プロバイダーによってスケジュールおよび管理されるタスク (別のアプリケーション) を使用する。クラウドを使用している場合は、クラウド プロバイダーがこれを行う機能を備えている可能性が高くなります。

最初のオプションを使用する場合は、Quartzをご覧ください。ここで必要なことを行うために Quartz を使用するよりも、Azure に WorkerRole があります。セットアップは非常に簡単です。例を次に示します。

        // 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 分に実行されます

于 2013-09-16T23:47:39.420 に答える