由于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; }
提前致谢。
答案 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
要添加一些上下文,int
和integer
数据类型之间存在很大差异。 Explained in this SO answer
答案 4 :(得分:-1)
我的问题是我的ID属性设置器具有内部设置。必须公开才能正常工作。
我会将其添加为评论,但可惜...我的代表不够。