我的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的正确顺序)。
你能帮我吗?提前致谢。希望你能理解我的英语不好。
答案 0 :(得分:1)
这里有一些基本知识。在您的情况下,ID(SQL Server生成的PK)是没有意义的字段。换句话说,这是一个字段,除了作为表中该特定行的唯一键之外,没有传达任何有用的信息。它没有指定顺序或顺序。
在您的示例中,排序是数据检索的一部分,可能涉及根据用于存储时间的字段进行选择(和排序)。它不会影响或影响主键。
附加组件:从长远来看,尝试使用主键“构建”智能会伤害您。这就是为什么它们也被称为“代理”键的原因之一。这是一条不变的人造信息,它指向唯一的一行。
其他键类型包括“候选”键(唯一但可变)和“外”键(另一个实体的主键)。不必要但对性能有用的指标包括组合多个字段(作为候选关键字或便于排序)的“复合”键和主要用于数据库性能的单个字段索引。