SQLite自动增量忽略显式ID

时间:2016-05-15 10:12:37

标签: c# sqlite

根据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”?

有谁知道我在这里做错了什么,或者这是一个错误?

0 个答案:

没有答案