1

我在我的 Windows Phone 通用应用程序中为 sqlite 使用 sqlite-net 我有以下具有表和列属性的类,并使用异步连接在 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。有没有什么办法解决这一问题?

4

3 回答 3

1

这是一篇旧帖子,但也许我的回答可以帮助某人,几乎我希望如此。首先将您的 Id 字段声明为可为空:

[PrimaryKey, AutoIncrement]
[Column("Id")]
public int? Id { get; set; }

重要的是您的主键可以为空,否则它将被发送到值为“0”的 Insert 方法,并且 SQLite 不会更改已经存在的整数值,并且下一次插入您将收到错误,因为您'正在尝试在表中放置另一个“0”索引。

并且,在您的 CreateTable 部分中,指定 createFlags 参数,如果省略,则默认为“无”。

我就是这样做的。“_dbPath”是IsolatedStorage中数据库文件的路径:

using (_connection = new SQLite.SQLiteConnection(_dbPath))
{
   _connection.CreateTable<T>(SQLite.CreateFlags.ImplicitPK | SQLite.CreateFlags.AutoIncPK);
}

这将使您的 Id 字段成为索引主键,自动递增。

于 2017-06-19T12:11:25.500 回答
0

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

 [SQLite.PrimaryKey, SQLite.AutoIncrement]
        public int Id { get; set; }
于 2014-10-29T12:52:57.620 回答
0

我有一个类似的问题。

尝试重置模拟器:

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

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

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

于 2015-05-27T10:06:14.460 回答