根据SQLite docs:
在INSERT上,如果不是ROWID或INTEGER PRIMARY KEY列 明确给出一个值,然后它会自动填充一个 未使用的整数,通常比当前最大的ROWID多一个 使用。无论AUTOINCREMENT是否正确,都是如此 使用了关键字。
然而,当这付诸实践时,任何明确给定的ID都会被Insert
覆盖:(提供的完整代码示例,只需复制并粘贴到控制台应用程序中,然后添加Sqlite包和sqlite3。 DLL。)
public class SqliteDatabase
{
string DatabasePath = string.Empty;
SQLiteConnection SqlCon;
public SqliteDatabase()
{
DatabasePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "sqliteDB.sqlite3");
CreateDatabase();
}
void CreateDatabase()
{
SqlCon = new SQLiteConnection(DatabasePath);
//Ensure we always have a clean start
SqlCon.DropTable<DatabaseObjectModel>();
SqlCon.CreateTable<DatabaseObjectModel>();
}
public void CreateIDIfNotExists()
{
//Explicitly set the ID:
var object1 = new DatabaseObjectModel()
{
ID = 10,
Name = "ObjectWithOwnID"
};
var object2 = new DatabaseObjectModel()
{
Name = "ObjectWithoutOwnID"
};
//Insert objects
SqlCon.Insert(object1);
SqlCon.Insert(object2);
foreach(DatabaseObjectModel dom in SqlCon.Table<DatabaseObjectModel>())
{
Console.WriteLine(string.Format("Name: {0} | ID: {1}", dom.Name, dom.ID));
}
}
}
public class DatabaseObjectModel
{
//Integer primary key, with auto-increment set to ON.
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
}
输出:
Name: ObjectWithOwnID | ID: 1
Name: ObjectWithoutOwnID | ID: 2
但是根据文档,ObjectWithOwnID
应该将其显式ID保持为“10”?
有谁知道我在这里做错了什么,或者这是一个错误?