实体框架添加了重复的记录,无法找出原因

时间:2019-06-25 13:34:24

标签: entity-framework application-pool

我有一个ASP.NET MVC 5 Web应用程序,该应用程序每隔一小时运行多个用于Web抓取的功能。该应用程序已部署到提供128 mb应用程序池内存的临时托管服务器。

我的问题是几天一次,它将重复的记录添加到数据库上的Detail表中,我不知道为什么,非常感谢您!

由于代码很大,我将只分享相关部分和我的怀疑,因此,如果您对我有所帮助,我将不胜感激!

  1. 我有一个异步函数DoUpdates(),这是进行Web抓取的函数。在此过程中,如果在我的数据库中不存在已废弃的数据,则将其添加,否则明细表将相应地更新。此过程大约需要3-4分钟才能完成。

  2. 我在代码中两个位置的新线程中运行DoUpdates函数。

    a)在global.asax的app_start函数中

    b)每小时一次在计时器内。

    这就是我所说的:

    var _updateThread = new Thread(() =>
                        {
                            DoUpdates();
                        });
    _updateThread.SetApartmentState(ApartmentState.STA);
    _updateThread.Start();
    
  3. DoUpdates函数完成后,我运行ProcessTasks函数以保存更改。因此,此时的场景是:

    a)有/有新数据,并且有更新到现有数据

    b)没有/没有新数据,仅更新现有数据。

    public async Task ProcessTasks()
    {
         if(TasksToProcess.Count!=0) //If there are new records add it
             _db.SCHEDULES.AddRange(TasksToProcess);
    
         Trace.WriteLine("saving");
         await _db.SaveChangesAsync();
         Trace.WriteLine("saved");
    }  
    

这可能导致什么?这是赛车问题吗?还是因为应用程序池内存已完成?

请不要让更新功能正常工作,运行30-40次,但是我知道应用程序池完成了,因为在某些时候它没有在计划的时间启动

非常感谢您的帮助!谢谢

0 个答案:

没有答案