SQLite-net-pcl - 始终返回 ID 为 0 (Xamarin)

问题描述 投票:0回答:6

由于 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; }

提前致谢。

xamarin sqlite-net sqlite-net-extensions
6个回答
5
投票

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

使用 SQLite.Net.Attributes;

  [PrimaryKey, AutoIncrement]
    public int? Id { get; set; }

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();

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


0
投票

查看您是否使用方法

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


0
投票

我一直在这里遇到同样的问题。

我手动创建表以保证更顺利的更新过程,而不是使用可用的

CreateTable
方法。

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

定义错误

[RecordIndexId] int PRIMARY KEY NOT NULL

正确定义

[RecordIndexId] integer PRIMARY KEY NOT NULL

添加一点上下文,

int
integer
数据类型之间存在很大差异。 在此答案中进行了解释


0
投票

确保您没有将 InsertOrReplace 与 AutoIncrement 主键一起使用。它总是会覆盖 id 为 0 的项目,并且永远不会插入新的项目。 -redent84

所有数据库条目都需要使用

await _database.InsertAsync(myClass);

添加

这是一条评论,而不是一个答案,所以我想把它作为一个评论,以防它在评论中被遗漏。它节省了我很多时间和压力。谢谢redent84。


-1
投票

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

我会将其添加为评论,但可惜...我没有足够的代表。

© www.soinside.com 2019 - 2024. All rights reserved.