等待不能使用migrateasync()

时间:2018-04-22 10:29:03

标签: c# xamarin entity-framework-core

我现在正在学习实体框架和Xamarin,并尝试使用数据库连接编写简单的待办事项列表。我发现并复制了此代码用于数据库连接,但我的IDE(Visual Studio 2017)输出错误,说await仅适用于具有async修饰符的方法。我试图在这里找到一些解决方案,但无法找到它。可能导致此问题的原因以及可能的修复方法是什么?

var dbFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var fileName = "Tasks.db";
var dbFullPath = dbFolder+"\\"+fileName;
mainContext = new TaskContext(dbFullPath);
await mainContext.Database.MigrateAsync();

提前致谢

1 个答案:

答案 0 :(得分:0)

async修饰符不是" Async"在#34; MigrateAsync"结束时 - 这只是一个命名惯例。编译器告诉您的是,您调用await 的方法是shuold被标记为异步的方法。

您没有使用整个方法,只包含代码段,但它必须是标记为async并返回voidTask的方法:

public async void Migrate()
{
    var dbFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    var fileName = "Tasks.db";
    var dbFullPath = dbFolder+"\\"+fileName;
    mainContext = new TaskContext(dbFullPath);
    await mainContext.Database.MigrateAsync();
}

这是因为调用await影响调用方法,而不是调用方法。它使包络Migrate方法停止执行,将控制权返回给调用者,并构建幕后状态机以恢复执行。调用者是异步方法。

我建议您查看async / await的基本教程,因为它了解 critical ,了解它们的使用方式。只是复制粘贴一个随机的代码片段是无法让事情发挥作用的: