我有一个远程Web服务,它返回两个int值,即:
我有一个定义为Parameters
的模型,如下所示:
public class Parameters
{
public int Frequency { get; set; }
public int Conserve { get; set; }
}
在每次启动应用程序时,都会调用Web服务来获取值。在第一次启动应用程序时,值将保存到sqlite数据库中。
随后,在每次启动应用程序后,都会调用Web服务以获取值。每次将值保存到sqlite db。
方法是:
public async Task InsertParams()
{
await con.CreateTableAsync<Parameters>();
ParamService ps = new ParamService();
Parameters pm = new Parameters();
pm = await ps.GetParams(); // call to webservice
await con.InsertOrReplaceAsync(pm);
}
问题是,如果最初在Web服务上频率值为30
,则会将其插入数据库中。但是当值更改为50
时,它不会覆盖sqlite db中的行。
我只希望在sqlite db中有一行应该覆盖/替换。请告知我如何实现这一目标。感谢。
答案 0 :(得分:0)
InsertOrReplace
方法requires a unique identifier ID
。
否则,您希望它如何检查是否存在行并在需要时进行更新?
所以你必须选择:
1.添加Id属性并始终保持相同。
public class Parameters
{
[PrimaryKey]
public int Id { get; set; }
public int Frequency { get; set; }
public int Conserve { get; set; }
}
...
// TODO: Hacky solution
pm = await ps.GetParams(); // call to webservice
pm.Id = 1;
await con.InsertOrReplaceAsync(pm);
...
InsertOrReplace
截断表并插入一行。P.S。:在SQL表中保留一行并不自然,您可以考虑使用其他一些缓存解决方案,以便有效地使用上述黑客攻击。