我之前使用过 SQLite,并且在循环中使用 Insert 添加多行for
很慢。解决方案是使用transaction
.
现在我SQLiteAsyncConnection
在 SQLite.Net(用于 ORM)中使用,我也尝试使用transaction
. 它有效,但只有一个问题。插入顺序不是数据的顺序。
Database.RunInTransactionAsync(
(SQLiteConnection conn) => {
foreach (var row in rows)
{
conn.InsertOrReplace(row);
}
conn.Commit();
}
);
如果rows
包含 [1,2,3,4,5,6],则数据库中的行类似于 [3,1,2,6,4,5]。我怎样才能保持原来的订单?
请注意,我仅指新插入的行。即使代码正在替换现有行,但在测试时数据库中没有要替换的现有行。
PS:该行的ID
字段是[PrimaryKey]
,但rows
在行中没有排序ID
。似乎在数据库中的行是按ID
. 我不希望它被排序,ID
但要保持原始顺序。
PS 2:我需要知道ID
最后插入的行。当使用类似的 GUI 工具查看数据库DB Browser for SQLite
或获取最后一项时LIMIT 1
,SQLite 似乎已自动对行进行排序ID
。我做了一些谷歌搜索,它按照SQL的规则说,当没有时ORDER BY
,返回的行的顺序不保证是物理顺序,无论如何。我应该创建另一个字段并将其设置为主要的自动增加字段吗?
目前,ID
保证每行唯一,但“ID”是数据本身的一部分,而不是专门添加用于数据库的字段。