自动增量无法与 Windows Phone 通用应用程序中的 sqlite-net 客户端一起使用

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

我在 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。有什么办法可以解决这个问题吗?

sqlite windows-phone-8.1 win-universal-app sqlite-net
4个回答
2
投票

这是一篇旧文章,但也许我的回答可以帮助某人,几乎我希望如此。 首先将您的 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 字段成为索引主键,自动增量。


0
投票

我认为使用下面的代码会对您有所帮助。

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

0
投票

我也有类似的问题。

尝试重置模拟器:

Step 1: Goto C:\Program Files (x86)\Microsoft XDE\8.1\
Step 2: Run XdeCleanup.exe

并重新运行您的应用程序。

这发生在我身上,因为我创建了一个没有主键和自动增量的数据库,然后将其添加到代码中。但不知何故,没有 PK&AI 的状态被缓存在模拟器中。


0
投票

如果您使用的是 sqlite-net-pcl nuget,可能是因为您使用了

InsertOrReplace
。 请参阅https://stackoverflow.com/a/77755612/14161217

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