SQLiteAsyncConnection 按顺序插入多行?

SQLiteAsyncConnection inserting multiple row in order?

我以前使用过 SQLite,在 for 循环中使用 Insert 添加多行很慢。解决方案是使用 transaction.

现在我在 SQLite.Net(对于 ORM)中使用 SQLiteAsyncConnection,我也尝试使用 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。当使用 DB Browser for SQLite 之类的 GUI 工具查看数据库或通过 LIMIT 1 获取最后一项时,似乎 SQLite 已自动按 ID 对行进行排序。我做了一些 Google 搜索,它按照 SQL 的规则说,当没有 ORDER BY 时,返回的行的顺序不能保证是物理顺序,无论如何。我应该创建另一个字段并将其设置为主要的、自动增加的字段吗?

目前,ID保证每行是唯一的,但'ID'是数据本身的一部分,而不是专门为与数据库一起使用而添加的字段。

SQL 表在逻辑上是无序的,所以如果您想要某种顺序,您总是必须在查询中使用 ORDER BY。

如果您的数据不包含与插入顺序对应的任何值(例如,时间戳),那么您必须使用rowid,即添加一个声明为 INTEGER PRIMARY KEY 的列。