我正在编写一个MVC 5互联网应用程序,并想知道如何在创建数据库时从async方法调用seed方法。
这是我的代码:
public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context) {
SetupAdminAndSampleObjectsDatabase();
base.Seed(context);
}
}当前,当调用SetupAdminAndSampleObjectsDatabase方法时,我将得到以下错误:
System.NotSupportedException:在以前的异步操作完成之前,在此上下文上启动第二个操作。在此上下文中调用另一个方法之前,请使用“等待”确保任何异步操作都已完成。不保证任何实例成员都是线程安全的。
以下是方法定义:
public async Task SetupAdminAndSampleObjectsDatabase()我正在此方法中添加多个对象。
如果使用SetupAdminAndSampleObjectsDatabase关键字调用await方法,那么上述错误是否正确?
因此,总之,如何从数据库async方法调用seed方法?这个是可能的吗?
提前谢谢。
发布于 2015-05-18 02:43:31
你可以做两件事之一:
1)使种子方法异步,并使用等待。
protected override async void Seed(ApplicationDbContext context) {
await SetupAdminAndSampleObjectsDatabase();
base.Seed(context);
}2)在异步方法上使用.WaitAndUnwrapException()
protected override void Seed(ApplicationDbContext context) {
SetupAdminAndSampleObjectsDatabase().WaitAndUnwrapException();
base.Seed(context);
}希望这能帮上忙!
https://stackoverflow.com/questions/30294019
复制相似问题