在Windows Phone通用应用程序中,AutoIncrement无法与sqlite-net Client一起使用

时间:2014-10-29 11:22:26

标签: sqlite windows-phone-8.1 win-universal-app sqlite-net

我在我的windows phone通用应用程序中使用sqlite-net for sqlite我有以下带有表和列属性的类,并使用async连接在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。有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

我有类似的问题。

尝试重置模拟器:

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

然后重新运行你的应用。

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

答案 1 :(得分: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字段成为索引的主键,自动增量。

答案 2 :(得分:-1)

我认为使用以下代码可以帮助您。

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