我正在编写一个MVC 5互联网应用程序,并想知道在创建数据库时如何从async
方法调用seed
方法。
这是我的代码:
public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context) {
SetupAdminAndSampleObjectsDatabase();
base.Seed(context);
}
}
目前,在调用SetupAdminAndSampleObjectsDatabase
方法时,我收到以下错误:
System.NotSupportedException:对此启动了第二个操作 上一次异步操作完成之前的上下文使用 &#39;等待&#39;确保完成任何异步操作 在此上下文中调用另一个方法之前。任何实例成员 不保证是线程安全的。
以下是方法定义:
public async Task SetupAdminAndSampleObjectsDatabase()
我在这个方法中添加了多个对象。
我是否正确说如果使用SetupAdminAndSampleObjectsDatabase
关键字调用await
方法,则会解决上述错误?
因此,总之,如何从数据库async
方法调用seed
方法?这可能吗?
提前致谢。
答案 0 :(得分:2)
你可以做以下两件事之一:
1)使Seed方法异步,并使用await
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);
}
希望有所帮助!