更新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);

被执行。我其实不知道确切的原因。请帮忙。

更新SQLite db并在同一异步功能中使用更新的记录

您的Update方法正在"即发即弃"的 fasion 中运行。await GetMyTableDataAsync()时,数据库中的数据可能尚未更新。

您需要做的是将Updateasync 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();
}

作为旁注:

  1. 如果你没有做任何其他事情,然后在 UpdateAsync 内等待,你可以简单地返回执行Task并将其await调用链的更高位置:

    public Task UpdateAsync(MyTable entity)
    {
       SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
       return conn.UpdateAsync(entity); 
    }
    
  2. 确保正确释放数据库连接。