7

由于 Android 7.0 SQlite 问题,我最近从 SQLite.NET 转到 SQLite-net-pcl。

在此过程中,我更新了所有库,并且在插入/删除等方面一切正常。

我遇到的唯一问题是,每次我从数据库中检索项目时,它的 ID 始终为 0。这会导致更新项目出现问题。以前有人遇到过这个问题吗?

 [SQLite.PrimaryKey, SQLite.AutoIncrement]
    public int ID { get; set; }
    public string objectId { get; set; }
    public DateTime createdAt { get; set; }
    public DateTime updatedAt { get; set; }
    public string Title { get; set; }

提前致谢。

4

5 回答 5

5

请尝试使用这个,这对我有用

使用 SQLite.Net.Attributes;

  [PrimaryKey, AutoIncrement]
    public int? Id { get; set; }
于 2017-09-28T16:49:52.170 回答
2

遇到了几乎相同的情况。所有行返回 id 为 0

class ToDo : Java.Lang.Object
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; }

除了我只是忘记打字了;在物业中。

可能对解决此类问题的人有所帮助的一件事是使用 GetMapping() 方法来获取有关使用 CreateTable() 创建表时使用的映射的一些信息。例如:

        Toast.MakeText(this, db.GetMapping<ToDo>().TableName.ToString(), ToastLength.Long).Show();
        Toast.MakeText(this, db.GetMapping<ToDo>().HasAutoIncPK.ToString(), ToastLength.Long).Show();

使用这个我发现我的桌子上没有设置 AutoIncrement (HasAutoIncPK = false)。

于 2017-08-09T09:53:32.630 回答
0

我在这里一直在努力解决同样的问题。

我手动创建表以确保更顺畅的更新过程向前推进,而不是使用CreateTable可用的方法。

我最终偶然发现的修复是我的 PRIMARY KEY 列使用了错误的数据类型。

错误的定义

[RecordIndexId] int PRIMARY KEY NOT NULL

正确定义

[RecordIndexId] integer PRIMARY KEY NOT NULL

int为了添加一点上下文,和integer数据类型之间有很大的不同。在这个 SO 答案中解释

于 2018-02-07T13:19:08.513 回答
0

查看您是否使用方法CreateComand(query)和创建了表ExecuteNonQuery()。如果是这种情况,请使用该CreateTable<Type>()方法创建表。通过上述方法在建表时初始化主键和自增属性

于 2017-07-18T04:33:33.540 回答
-1

我的问题是我的 ID 属性设置器有一个内部设置。这必须公开才能正常工作。

我会将此添加为评论,但唉......我没有足够的代表。

于 2019-11-18T21:35:34.650 回答