using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.EntityFrameworkCore; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Parking_space_WebAPI.Services; public class ParkingLogCleanupService : BackgroundService { private readonly IServiceScopeFactory _scopeFactory; public ParkingLogCleanupService(IServiceScopeFactory scopeFactory) { _scopeFactory = scopeFactory; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { using (var scope = _scopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); try { // 計算三個月前的日期 DateTime threeMonthsAgo = DateTime.Now.AddMonths(-3); // 查找三個月前的資料 var oldLogs = await _context.ParkingLogs .Where(log => log.Timestamp < threeMonthsAgo) .ToListAsync(); if (oldLogs.Any()) { _context.ParkingLogs.RemoveRange(oldLogs); await _context.SaveChangesAsync(); Console.WriteLine($"{oldLogs.Count} old parking logs deleted."); } } catch (Exception ex) { // 錯誤顯示 Console.WriteLine($"An error occurred during cleanup: {ex.Message}"); } } // 每 24 小時執行一次清理 await Task.Delay(TimeSpan.FromDays(1), stoppingToken); } } }