0

我的 SQL 表中的 ID 顺序有问题。我创建了一个程序,它从机器中读取一些变量,然后通过实体框架将这些值记录到 SQL 表中。对于值的上传,它使用两个列表 - 当第一个列表被填充(填充时间,例如,大约 10 分钟)变量时,第二个列表(包含记录的变量)上传到 SQL 表并自行清除。10 分钟后列表更改。

它工作正常,但是一旦我注意到某些行(有些 = 1000 行中的 100 行)有“损坏的顺序”。我的意思是有如下内容:

ID - 价值 - 时间

1000 - 3 - 15:00

1001 - 4 - 15:01

1002 - 1 - 14:58 !!

1003 - 2 - 14:59 !!

1004 - 5 - 15:02

1005 - 6 - 15:03

换句话说,有些变量有时会改变它们在 SQL 表中的顺序。这些问题行之前和之后的数千行都可以。

UPD:正如我刚刚发现的那样,如果时间(14:50:xx...15:50) ,这个问题每50分钟和51分钟发生一次......理解起来很奇怪......

所以我试着稍微编辑一下代码(不要向我扔砖头——我是编程新手)。有一种方法可以将记录的变量从列表写入 SQL 表:

public void WriteRecordedVariableToSQL()
{
    if (timeTumbler == true && VariablesToBulkSQLList2.Count > 0)
    {
        List<VariableRecord> sortedVariablesToBulkSQLList2 = VariablesToBulkSQLList2.OrderBy(o => o.Time).ToList();
        context.VariableRecords.AddRange(sortedVariablesToBulkSQLList2);
        context.BulkSaveChanges();
        VariablesToBulkSQLList2.Clear();
        sortedVariablesToBulkSQLList2.Clear();

    }

    if (timeTumbler == false && VariablesToBulkSQLList1.Count > 0)
    {
        List<VariableRecord> sortedVariablesToBulkSQLList1 = VariablesToBulkSQLList1.OrderBy(o => o.Time).ToList(); //sortuju podle casu
        context.VariableRecords.AddRange(sortedVariablesToBulkSQLList1);
        context.BulkSaveChanges();
        VariablesToBulkSQLList1.Clear();
        sortedVariablesToBulkSQLList1.Clear();

    }

}

但结果是一样的。如您所见,我使用实体框架扩展 ( EFE ) 及其 AddRange 来添加整个列表。问题可能存在吗?

所以我想解决这个问题,即 SQL 表中有按时间排序的值( ID 顺序正确)。

你能帮助我吗?提前致谢。希望你能理解我糟糕的英语。

4

1 回答 1

1

这里有一点基础知识。在您的情况下,ID(SQL Server 生成的 PK)是一个无意义的字段。换句话说,它是一个字段,除了作为表中特定行的唯一键之外,不传达任何有用信息。它没有指定顺序或顺序。

对于您的示例,排序是数据检索的一部分,并且将涉及根据您用于存储时间的字段进行选择(和排序)。它不影响或影响主键。

附加组件:从长远来看,尝试使用主键“内置”智能会伤害您。这就是为什么它们也被称为“代理”键的原因之一。它是一条不变的人工信息,指的是唯一的行。

其他键类型包括“候选”键(唯一但可更改)和“外来”键(另一个实体的主键)。非必要但对性能有用的索引包括组合多个字段(作为候选键或便于排序)的“复合”键和主要用于数据库性能的单字段索引。

于 2018-08-09T17:27:09.293 回答