将C#对象数组与数据库表同步

时间:2012-01-10 23:00:19

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

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

截至目前,当我运行我的功能来刷新它时,没有检查,它只是再次添加它们。我需要弄清楚最好的方法来查看某个对象是否已经存在于特定作业中,并且只为它创建一个新的Object,如果不存在的话。

执行此操作的最佳方法是检查行的ID,然后搜索每个当前的任务对象以查看它是否存在?我主要担心的是我不知道自动增量ID值是否会替换丢失的值。如果我有ID为1,2,3,4,5的行,并且在某些时候删除ID为3的行,则下一行是3还是6?

2 个答案:

答案 0 :(得分:0)

通常,自动递增ID会增加,但永远不会重新创建(数据库将始终为+1,但不会返回并查看旧ID是否已释放)。您应该通过查看SQL服务器文档或测试它来确认这一点。

您最好的选择是检查您的收藏品中的物品。我会按照您的说法进行操作,并确保在添加值之前,集合中不存在ID值。

答案 1 :(得分:0)

您可以将对象存储在一个字典中,其中Key为int,Value是对象的类型(例如Task)。然后,您可以使用密钥从字典中拉出任务:

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);
}

对于id的自动递增,RDBMS很可能将新行的值设置为指定的最后一个值+ 1.