C# 更新SQLite数据库&;在同一异步功能中使用更新的记录
我正在使用此方法更新特定表的元组C# 更新SQLite数据库&;在同一异步功能中使用更新的记录,c#,sqlite,windows-runtime,winrt-xaml,async-await,C#,Sqlite,Windows Runtime,Winrt Xaml,Async Await,我正在使用此方法更新特定表的元组 public async void Update(MyTable entity) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); await conn.UpdateAsync(entity); } 参考: 现在主要是更新MyTable中的记录&我将MyTable记录绑定到绑定到视图的ViewModel private async void button_Tappe
public async void Update(MyTable entity)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
await conn.UpdateAsync(entity);
}
参考:
现在主要是更新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);
被执行。
我实际上不知道确切的原因。请提供帮助。您的
更新
方法正在以“火灾后忘记”的方式运行。当您等待GetMyTableDataAsync()时,数据库中的数据可能尚未更新
您需要做的是将Update
从async void
更改为async Task
:
public async Task UpdateAsync(MyTable entity)
并在上面等待:
await UpdateAsync(entity);
您的完整代码如下所示:
private async void button_Tapped(object sender, TappedRoutedEventArgs e)
{
await MyTableRepository.UpdateAsync(scheduleRecord);
this.DefaultViewModel["MyViewModel"] = await ViewModelClass.GetMyTableDataAsync();
}
作为旁注:
UpdateAsync
内等待之外,您没有做任何其他事情,那么只需返回正在执行的任务
和wait
即可,它位于调用链的更高位置:
public Task UpdateAsync(MyTable entity)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
return conn.UpdateAsync(entity);
}
我将UpdateAsync任务更改为async任务。还是一样的问题。。。我认为您的第二点是正确的,即DB连接未正确处理。。。目前正在弄清楚这一点……除非
SQLiteAsyncConnection.UpdateAsync
是同步伪装成异步的,否则在您的代码中,无法保证数据在读取之前会被保存。@PauloMorgado请解释。如果他使用等待更新同步
,为什么在阅读之前不保证更新?您的问题代码是原始代码,而不是答案代码。OP似乎怀疑你指出了一个真正的问题,我很抱歉。问题在于我如何更新MyViewModel。实际上,我应该从MyViewModel中删除scheduleRecord&然后我应该调用它。DefaultViewModel[“MyViewModel”]=await ViewModelClass.GetMyTableDataAsync();总之,我的逻辑错了。无论如何,这是一个百万thanx 4 ur帮助。我只想与大家分享一下这个模块(09)Local data
详细讨论了SQLite,供找到本文并希望了解更多信息的开发人员使用。Thanx@JerryNixon MSFT。在提供的链接上有很多东西需要学习。顺便说一下,我很抱歉。问题在于我如何更新MyViewModel。实际上,我应该从MyViewModel中删除scheduleRecord&然后我应该调用它。DefaultViewModel[“MyViewModel”]=await ViewModelClass.GetMyTableDataAsync();总之,我的逻辑错了。无论如何,一百万比四是你的帮助