我在 Windows Phone 通用应用程序中使用 sqlite-net for sqlite,我有以下具有表和列属性的类,并使用异步连接在 sqlite 中添加数据,所有工作正常,但 Id 列不会自动递增,也不是首要的关键。还有其他人面临这个问题吗?以下是我的代码。
[Table("Account")]
public class Account
{
[PrimaryKey, AutoIncrement]
[Column("Id")]
public int Id { get; set; }
[Column("FirstName")]
public string FirstName { get; set; }
[Column("LastName")]
public string LastName { get; set; }
[Ignore]
public string FullName { get; set; }
}
SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection("database.sqlite");
var result = await conn.CreateTableAsync<Account>();
var _accountList = new Account();
_accountList.FirstName = "Name 1";
_accountList.LastName = "------------";
var result1 = await conn.InsertAsync(_accountList);
_accountList = new Account();
_accountList.FirstName = "Name 2";
_accountList.LastName = "------------";
result1 = await conn.InsertAsync(_accountList);
var list = await conn.Table<Account>().ToListAsync();
var item = list;
读取表时,所有记录的 Id 始终为 0。有什么办法可以解决这个问题吗?
这是一篇旧文章,但也许我的回答可以帮助某人,几乎我希望如此。 首先将您的 Id 字段声明为可为空:
[PrimaryKey, AutoIncrement]
[Column("Id")]
public int? Id { get; set; }
重要的是你的主键可以为空,否则它将被发送到值为“0”的Insert方法,并且SQLite不会更改已经存在的整数值,并且下一次插入你将收到错误,因为您正在尝试在表中添加另一个“0”索引。
并且,在 CreateTable 部分中,指定 createFlags 参数,如果省略,则默认为“none”。
我就是这样做的。 “_dbPath”是IsolatedStorage中数据库文件的路径:
using (_connection = new SQLite.SQLiteConnection(_dbPath))
{
_connection.CreateTable<T>(SQLite.CreateFlags.ImplicitPK | SQLite.CreateFlags.AutoIncPK);
}
这将使您的 Id 字段成为索引主键,自动增量。
我认为使用下面的代码会对您有所帮助。
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int Id { get; set; }
我也有类似的问题。
尝试重置模拟器:
Step 1: Goto C:\Program Files (x86)\Microsoft XDE\8.1\
Step 2: Run XdeCleanup.exe
并重新运行您的应用程序。
这发生在我身上,因为我创建了一个没有主键和自动增量的数据库,然后将其添加到代码中。但不知何故,没有 PK&AI 的状态被缓存在模拟器中。
如果您使用的是 sqlite-net-pcl nuget,可能是因为您使用了
InsertOrReplace
。
请参阅https://stackoverflow.com/a/77755612/14161217