在更新查询期间,它抛出NotSupportedException

本文关键字:NotSupportedException 更新 查询 | 更新日期: 2023-09-27 18:20:46

我正在处理windows存储应用程序中的SQLite。我正在使用更新表中的值

var tagPage = db.QueryAsync<MyModel>("UPDATE MyModel SET Tag =2 WHERE id = 1");
db.UpdateAsync(tagPage);

它通过方法在SQLite.cs类上抛出NotSupportedException

public int Update(object obj, Type objType)
{
    if (obj == null || objType == null)
        {
            return 0;
        }
        var map = GetMapping(objType);
        var pk = map.PK;
        if (pk == null)
        {
            throw new NotSupportedException("Cannot update " + map.TableName + ": it has no PK");
        }
        var cols = from p in map.Columns
                   where p != pk
                   select p;
        var vals = from c in cols
                   select c.GetValue(obj);
        var ps = new List<object>(vals);
        ps.Add(pk.GetValue(obj));
        var q = string.Format("update '"{0}'" set {1} where {2} = ? ", map.TableName, string.Join(",", (from c in cols
                                                                                                        select "'"" + c.Name + "'" = ? ").ToArray()), pk.Name);
        return Execute(q, ps.ToArray());
}

因为我认为它不会得到素数,我在表中提供了素数。我尝试了异步和等待,但没有用,为什么会发生这种情况?请帮我

在更新查询期间,它抛出NotSupportedException

关于您的NotSupportedException问题,我怀疑您的模型缺少PrimaryKey属性:
public class MyModel
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public int Tag { get; set; }        
    public string Foo { get; set; }
}

您将需要上面的属性,即使您的数据库架构已经定义了这些属性。此时,SqliteNet不会从数据库中读取架构数据。

其他一些想法:

首先,您应该只使用同步Sqlite-Net API或异步API。不要两者都用。

我个人更喜欢同步的API,因为它看起来更与时俱进。异步API已经11个月没有更新了,而同步API是在4个月前更新的。除此之外,我一直无法弄清楚如何使用异步API进行事务。同样,这是个人偏好。

其次,QueryQueryAsync方法应仅用于查询(对于SELECTs)。它们不应用于UPDATE s。为了添加/更改数据,您需要使用以下同步方法:ExecuteUpdateInsert等。如果使用异步API,则存在异步对应方(ExecuteAsync等)。

请阅读Sqlite-Net项目页面,因为您会在其中找到许多关于API一般用法的有用信息。

相关文章:
  • 没有找到相关文章