以前はSQLiteを使用していましたが、for
ループの挿入を使用して複数の行を追加するのは遅かったです。解決策はtransaction
を使用していました。複数の行を順番に挿入するSQLiteAsyncConnection?
SQLite.Net(ORM用)にSQLiteAsyncConnection
を使用していますので、transaction
も使用しようとしました。それは動作しますが、問題は1つだけです。挿入順序はデータの順序ではありません。
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:行が[PrimaryKey]
あるID
フィールドを有するが、rows
の行はID
によってソートされていません。データベースでは、行はID
でソートされているようです。私はID
でソートするのではなく、元の順序を維持することを望んでいます。
PS 2:最後に挿入された行のID
を知る必要があります。 DB Browser for SQLite
のようなGUIツールを使用してデータベースを表示したり、最後の項目をLIMIT 1
で取得すると、SQLiteは自動的に行をID
でソートしたようです。私はいくつかのGoogleの検索を行い、それはORDER BY
がない場合、SQLのルールによって返された行の順序は、とにかく物理的な順序であることは保証されていないと述べた。別のフィールドを作成し、それをプライマリの自動増加フィールドとして設定する必要がありますか?
現在、ID
は行ごとに一意であることが保証されていますが、 'ID'はデータ自体の一部であり、データベースと共に使用するために特別に追加されたフィールドではありません。