更新SQLite db并在同一异步功能中使用更新的记录
本文关键字:更新 记录 功能 db SQLite 异步 | 更新日期: 2023-09-27 18:36:25
我正在使用此方法更新特定表的元组
public async void Update(MyTable entity)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
await conn.UpdateAsync(entity);
}
参考: http://msdn.microsoft.com/en-us/library/windows/apps/dn263243.aspx
现在,我正在尝试更新MyTable中的记录,并将MyTable记录绑定到绑定到视图的ViewModel。
private async void button_Tapped(object sender, TappedRoutedEventArgs e)
{
MyTableRepository.Update(scheduleRecord);
this.DefaultViewModel["MyViewModel"] =await ViewModelClass.GetMyTableDataAsync();
}
这里的问题是视图没有更新。在我停止应用程序并检查数据库值后,数据库似乎已更新,之后,如果我再次运行该应用程序,将显示所需的更新视图。
我是异步等待的新手。所以我的感觉是,也许ViewModel甚至在之前就已经更新了
MyTableRepository.Update(scheduleRecord);
被执行。我其实不知道确切的原因。请帮忙。
您的Update
方法正在"即发即弃"的 fasion 中运行。await GetMyTableDataAsync()
时,数据库中的数据可能尚未更新。
您需要做的是将Update
从async void
更改为async Task
:
public async Task UpdateAsync(MyTable entity)
并await
:
await UpdateAsync(entity);
您的完整代码如下所示:
private async void button_Tapped(object sender, TappedRoutedEventArgs e)
{
await MyTableRepository.UpdateAsync(scheduleRecord);
this.DefaultViewModel["MyViewModel"] = await ViewModelClass.GetMyTableDataAsync();
}
作为旁注:
如果你没有做任何其他事情,然后在
UpdateAsync
内等待,你可以简单地返回执行Task
并将其await
调用链的更高位置:public Task UpdateAsync(MyTable entity) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); return conn.UpdateAsync(entity); }
确保正确释放数据库连接。