使用Mvvm Windows Universal的SQLite密钥属性问题



这是我的SQLite表的名为"ChallengeItem"的模型:

   [AutoIncrement]
    private int _key { get; set; }
    public int Key
    {
        get { return _key; }
        set { _key = value; OnPropertyChanged("Key");}
    }
    private bool _done;
    public bool Done
    {
        get { return _done; }
        set { _done = value; OnPropertyChanged("Done"); }
    }

我创建了一个名为"DatabaseManager"的类,其中包括以下代码行:

  conn.CreateTable<Models.ChallengeItem>();
  • 检查Key属性后发现它没有增量,关键值是在桌子我该怎么解决这个问题
  • 如何获取表中challengeitem的Done属性等于true的最后一个Item

假设您使用的是SQLite Net PCL(您的api看起来像)。

第一个问题:InsertOrReplace有一个特殊情况:它认为0是一个有效的密钥,doe不会自动递增它。您可以检查这种情况,然后使用常规的Insert。在这个问题中找到各种各样的例子。

此外,SQLite常见问题解答建议,"自动增量"仅适用于主键。

第二个问题:SQL表不保证任何顺序,所以您应该使用额外的属性,比如创建日期。由于您有一个AutoIncrement ID,您可以在一个简单的linq查询中使用它:

conn.Table<ChallengeItem>().Where(i => i.Done).OrderByDescending(i => i.Key);

最新更新