Windows 服务未检索已编辑的 SQL 行

Windows Service not retrieving edited SQL rows

我试图通过搜索找到这个问题的答案,但我觉得我的措辞不佳,无法获得不错的结果。

我有一个使用 Linq-SQL 的 windows 服务。它应该每 20 秒从 table 中提取数据,处理数据,相应地更新行,然后冲洗并重复。

    SQLDataContext sqlDB;

    protected override void OnStart(string[] args)
    {
         ServiceLog1.WriteEntry("Service1 started");

        sqlDB= new SQLDataContext ();

        //Initalize and start Timer for service action
        Timer timer = new Timer();
        timer.Interval = 20000; // 20 seconds
        timer.Elapsed += new ElapsedEventHandler(this.DoWork);
        timer.Start();
    }

    public void DoWork(object sender, ElapsedEventArgs args)
    {
        List<Items> items= sqlDB.Items.Where(i=> i.Processed == false).Take(20).ToList();

        if(items.Count > 0)
            ServiceLog1.WriteEntry("Processing " + items.Count + " queue items.");

         //work work...
         //set items processed == true
         //submit changes to DB

我的问题(我什至不能 100% 确定这是一个问题)是这样的:

如果这是 运行 通过三个未处理的测试项目,它会将它们全部更新为应处理的。简单地测试 WHAT IF 场景,如果我要在 SQL 中将一项的已处理值更改回 false,该服务将在事件日志中创建一个条目,说明它正在处理一项,但该项目永远不会再次更新,并将在每个循环中处理。

这似乎只发生在 SQL 中编辑的项目上。新项目正常处理。谁能给我解释一下这是怎么回事?

正如 Damien_The_Unbeliever 在问题评论中指出的那样,我的问题与将对象保存在内存中的 SQLDataContext 有关。每次计时器结束时,我都需要创建一个新的上下文。