gpt4 book ai didi

c# - 在更新查询期间它抛出 NotSupportedException?

转载 作者:行者123 更新时间:2023-11-30 20:56:37 26 4
gpt4 key购买 nike

我在 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());
}

因为我认为它不会获得主键,我在表中提供了主键。我用 async 和 await 尝试过但没有用,为什么会这样?请帮助我

最佳答案

关于您的 NotSupportedException 问题 - 我怀疑您的模型缺少 PrimaryKey 属性:

public class MyModel
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }

public int Tag { get; set; }
public string Foo { get; set; }
}

您将需要上述属性,即使您的数据库模式已经定义了它们。此时,Sqlite-Net 不会从数据库中读取模式数据。

一些其他的想法:

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

我个人更喜欢同步 API,因为它似乎是最新的。异步 API 已 11 个月未更新,而同步 API 已在 4 个月前更新。除此之外,我一直无法弄清楚如何使用异步 API 进行交易。同样,这是个人喜好。

其次,QueryQueryAsync 方法应该仅用于查询(用于SELECT)。它们不应该用于 UPDATE。要添加/更改数据,您需要使用这些同步方法:ExecuteUpdateInsert 等。如果使用异步 API,有异步对应物(ExecuteAsync 等)。

请阅读Sqlite-Net Project page ,因为您会在那里找到很多关于一般 API 使用的有用信息。

关于c# - 在更新查询期间它抛出 NotSupportedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com