我现在正在学习Entity Framework和Xamarin,并试图写出与数据库连接的简单待办事项列表。我找到并复制了这段用于数据库连接的代码,但我的IDE (Visual Studio 2017)输出错误,说await只适用于带有异步修饰符的方法。我试着在这里找到一些解决方案,但找不到。可能导致此问题的原因以及可能的修复方法是什么?
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();提前感谢
发布于 2018-04-22 18:33:44
async修饰符并不是"MigrateAsync“末尾的"Async”--这只是一个命名约定。编译器告诉你调用await的方法应该被标记为async。
您没有带来整个方法,只带来了代码片段,但它必须是一个标记为async并返回void或Task的方法
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的基本教程,因为理解它们的使用方式是至关重要的。只是复制-粘贴一个随机的代码片段并不是让事情正常工作的方法:
https://stackoverflow.com/questions/49964926
复制相似问题