【问题标题】:Synchronize C# Object Array with Database Table将 C# 对象数组与数据库表同步
【发布时间】:2012-02-07 08:48:52
【问题描述】:

我正在编写一个调度应用程序,我的数据库表中的每一行都是在特定时间运行的不同任务。在我的应用程序中,我提取这些信息,并将每个任务存储在一个单独的对象中,并将它们存储在一个列表中。

截至目前,当我运行我的函数来刷新它时,没有任何检查,它只是再次添加它们。我需要找出最好的方法来查看特定作业是否已经存在对象,如果不存在,则只为它创建一个新对象。

最好的方法是检查行的 ID,然后搜索每个当前的 task 对象以查看它是否存在?我主要担心的是我不知道自动增量 ID 值是否会替换缺失的值。例如,如果我有 ID 为 1、2、3、4、5 的行,并且在某个时候删除了 ID 为 3 的行,那么添加的下一行是 3,还是 6?

【问题讨论】:

    标签: c# .net sqlite scheduled-tasks task


    【解决方案1】:

    通常,自动递增 ID 会增加,但不会重新创建(数据库将始终 +1,但不会返回查看旧 ID 是否已释放)。您应该通过查看您的 SQL Server 文档或对其进行测试来确认这一点。

    您最好的选择是检查您的收藏中的对象。我会按照你说的做,并确保在添加值之前集合中不存在 ID 值。

    【讨论】:

      【解决方案2】:

      您可以将对象存储在字典中,其中键是 int,值是对象的类型(例如任务)。然后,您可以使用键将任务从字典中拉出:

      Dictionary<int, Task> dict = new Dictionary<int, Task>();
      
      // Code to do first-time initialise of the dictionary
      ....
      
      // Subsequent refresh
      Task task;
      if (!dict.TryGet(id, out task))
      {
          task = new Task();
          task.Id = id;
          ...
          dict.Add(id, task);
      }
      

      至于 ids 的自动递增,很可能 RDBMS 将新行的值设置为最后分配的值 + 1。

      【讨论】:

        猜你喜欢
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 2012-01-15
        相关资源
        最近更新 更多