我正在使用此方法更新特定表的元组
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 记录绑定(bind)到绑定(bind)到 View 的 ViewModel。
private async void button_Tapped(object sender, TappedRoutedEventArgs e)
{
MyTableRepository.Update(scheduleRecord);
this.DefaultViewModel["MyViewModel"] =await ViewModelClass.GetMyTableDataAsync();
}
这里的问题是 View 没有得到更新。在我停止应用程序并检查数据库值后,数据库似乎已更新,然后如果我再次运行应用程序,则会显示所需的更新 View 。
我是异步等待的新手。所以我的感觉是,也许 ViewModel 甚至在之前就已经更新了
MyTableRepository.Update(scheduleRecord);
被执行。
我其实不知道确切的原因。请帮忙。
最佳答案
您的 Update
方法以“一劳永逸”的方式运行。当你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);
}
关于c# - 更新 SQLite 数据库并在同一个异步函数中使用更新的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775482/