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

时间:2017-01-20 11:02:51

标签: xamarin sqlite-net sqlite-net-extensions

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

提前致谢。

5 个答案:

答案 0 :(得分:1)

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

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

除了我忘记输入set;在酒店。

有一件事可能会帮助有这种问题的人使用 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)。

答案 1 :(得分:1)

请尝试使用此功能,这对我有用

使用SQLite.Net.Attributes;

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

答案 2 :(得分:0)

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

创建表时初始化

答案 3 :(得分:0)

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

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

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

错误的定义

[RecordIndexId] int PRIMARY KEY NOT NULL

正确定义

[RecordIndexId] integer PRIMARY KEY NOT NULL

要添加一些上下文,intinteger数据类型之间存在很大差异。 Explained in this SO answer

答案 4 :(得分:-1)

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

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