将数据上传到 SQL 表(实体框架)后,实体按时间错误排序



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

它工作正常,但是有一次我注意到某些行(有些= 100行中的10000行("顺序中断"。我的意思是有如下内容:

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)...理解起来很奇怪...

所以我尝试稍微编辑一下代码(不要向我扔砖头 - 我在编程方面很新(。有一种方法可以将记录的变量从列表写入 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 顺序(。

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

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

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

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

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

最新更新