如果 3 天后未回答,则从数据库中删除问题对象

Delete a Question Object from Database after 3 days if it is not answered

我正在使用 .net 核心开发一个 Web 应用程序项目,我想从数据库中自行关闭(删除)一个问题对象(MySQL 在我的例子中)如果它已发布3天没有回复。 我相信我可以使用 Worker Services,但我不确定如何使用它以及在后台拥有这么多后台服务 运行 是否合乎逻辑(每个问题 1 service/timer)。 谢谢。

只需过滤掉它们,不要 return 在您对 UI 的查询中使用它们。 当您需要时手动删除,或者有一个后台作业每天运行一次或随时删除它们

我建议在 sql 中创建代理工作,为此问题 table 和答案 table 之间的关系,你的查询是这样的

Delete from QuestionsTable 
where id not in (select FK_questionID from AnswersTable) 
AND CreateDate < DATE_ADD(NOW() , INTERVAL -3 DAY)

并且每天执行这个查询

also you can update active field in Question Table

希望对你有所帮助

您只需要一项后台服务即可完成这项工作。

我假设你已经有一个服务接口:

public interface IQuestionService {
    Task<IEnumerable<Question>> GetQuestionsToClose();
    Task CloseQuestions(IEnumerable<Question> questions);
}

您需要实施后台服务:

public CloseQuestionsBackgroundService : BackgroundService
{
    private readonly IQuestionService questionService;
    public CloseQuestionsBackgroundService(IQuestionService questionService)
    {
        this.questionService = questionService;
    }
    protected override async Task ExecuteAsync(CancellationToken stopToken)
    {
      while (!stopToken.IsCancellationRequested)
      {
          var questionsToClose = questionService.GetQuestionsToClose().ConfigureAwait(false);
          if (questionsToClose.Any())
          {
               await questionService.CloseQuestions(questionsToClose).ConfigureAwait(false);
          }
          await Task.Delay(Timespan.FromSeconds(10)).ConfigureAwait(false); // choose how much time between iterations
      }
   }
}

现在您只需在 Startup.cs

的 ConfigureService 方法中注册后台服务
 services.AddHostedService<CloseQuestionsBackgroundService>();