gpt4 book ai didi

c# - 更新 SQLite 数据库并在同一个异步函数中使用更新的记录

转载 作者:行者123 更新时间:2023-12-03 18:50:32 25 4
gpt4 key购买 nike

我正在使用此方法更新特定表的元组

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 voidasync 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 里面等待。 ,您可以简单地返回正在执行的 Taskawait它在调用链上更高:
    public Task UpdateAsync(MyTable entity)
    {
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
    return conn.UpdateAsync(entity);
    }
  • 确保您正确处理数据库连接。
  • 关于c# - 更新 SQLite 数据库并在同一个异步函数中使用更新的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775482/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com