【问题标题】:Delete records when on specified date ASP.NET MVC在指定日期删除记录 ASP.NET MVC
【发布时间】:2014-03-12 16:56:13
【问题描述】:

我想问当当前日期和时间达到记录删除数据库中存储的日期时间时,如何自动从数据库中删除项目?

【问题讨论】:

  • 如果你使用的是sql server,你最简单的解决办法是设置一个定时作业是sql server
  • Revalee 开源项目可以帮助您解决这个问题。

标签: c# sql .net asp.net-mvc entity-framework


【解决方案1】:

由于您已使用 ASP.NET MVC 和 Entity Framework 对此进行了标记,因此我不确定您是否有权访问底层数据库服务器。但如果这样做,您的 ASP.NET 应用程序就不是执行此操作的最佳位置。而是在后端服务器上设置一个 SQL Server 代理作业,该作业可以按指定的时间间隔运行并运行 DELETE 查询。

创建一个类似这样的存储过程:

CREATE PROCEDURE dbo.DeleteOnSchedule
AS
BEGIN
  DELETE [dbo].[Table]
  WHERE [DateTimeToDelete] <= CURRENT_TIMESTAMP;
END

然后按计划运行该过程。

【讨论】:

    【解决方案2】:

    正如其他用户指出的那样,使用 ASP.Net 这样做并不理想。您最好设置作业或计划任务。

    话虽如此,我知道这并不总是可能的,所以如果你真的需要,你可以采取另一条路线-

    这里有关于如何设置的描述- https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

    基本上你只是使用缓存过期来触发代码执行。您可以简单地将删除逻辑添加到回调中,以定期清除旧记录。虽然这是一个 hack,所以我将它作为最后的手段。

    【讨论】:

    • 不错。有时您别无选择,只能像这样进行黑客攻击。 :-)
    【解决方案3】:

    您可以通过创建一个 .NET 计时器来执行此操作,该计时器可以检查您想要的任何内容并运行删除代码,例如在 5 分钟后删除未确认的用户。

     public static class DeleteEmployerTimer
    {
        static private JobsEntities JobDatabase=new JobsEntities();
        private static Timer threadingTimer;
    
         public static void StartTimer()
         {
             if (threadingTimer==null)
             {
                 //raise timer callback every 5 minutes
                 threadingTimer = new Timer(new TimerCallback(CheckData),
                                           HttpContext.Current, 5 * 60000, 5 * 60000);
             }
        }
        private static void CheckData(object sender)
        {
            MembershipUserCollection AllEmployer = Membership.GetAllUsers();
            foreach (MembershipUser Employer in AllEmployer)
            {
                //your condition to delete records (it can be everything you want date, specific data in config file)
                if(!Employer.IsApproved)
                {
                    MeWork.Domain.Database.Employer FindedEmployer = JobDatabase.Employer.Find(Employer.ProviderUserKey);
                    JobDatabase.Employer.Remove(FindedEmployer);
                    JobDatabase.SaveChanges();
                    Membership.DeleteUser(Employer.UserName, true);
                }
            }
        }
    }
    

    在应用启动时创建计时器

     public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
             ....
             //Create timer
             DeleteEmployerTimer.StartTimer();
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多