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

时间:2018-08-09 14:17:59

标签: c# sql entity-framework entity-framework-extensions

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

它工作正常,但是一旦我注意到某些行(某些= 10000行中的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();

    }

}

但是结果是一样的。 如您所见,我使用Entity FrameWork Extensions(EFE)及其AddRange来添加整个列表。问题可能在那里吗?

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

你能帮我吗?提前致谢。希望你能理解我的英语不好。

1 个答案:

答案 0 :(得分:1)

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

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

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

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