C# 从数据库种子方法调用异步方法
我正在编写一个MVC5 internet应用程序,想知道在创建数据库时如何从C# 从数据库种子方法调用异步方法,c#,asynchronous,asp.net-mvc-5,entity-framework-6,initializer,C#,Asynchronous,Asp.net Mvc 5,Entity Framework 6,Initializer,我正在编写一个MVC5 internet应用程序,想知道在创建数据库时如何从seed方法调用async方法 这是我的密码: public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext> { protected override void Seed(ApplicationDbContext context) { SetupA
seed
方法调用async
方法
这是我的密码:
public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context) {
SetupAdminAndSampleObjectsDatabase();
base.Seed(context);
}
}
我在这个方法中添加了多个对象
如果使用wait
关键字调用SetupAdminAndSampleObjectsDatabase
方法,则上述错误将得到解决,我这样说是否正确
总之,如何从数据库seed
方法调用async
方法?这可能吗
提前谢谢 您可以做以下两件事之一: 1) 使Seed方法异步,并使用wait
protected override async void Seed(ApplicationDbContext context) {
await SetupAdminAndSampleObjectsDatabase();
base.Seed(context);
}
2) 在异步方法上使用.waitAndUnwapeException()
protected override void Seed(ApplicationDbContext context) {
SetupAdminAndSampleObjectsDatabase().WaitAndUnwrapException();
base.Seed(context);
}
希望有帮助 多谢各位。我不知道我可以将async关键字添加到override方法中。请注意,如果使用选项1,则需要更改
SetupAdminAndSampleObjectsDatabase()的返回类型
toTask
如果它最初是void
或Task
,则无论原始返回类型T
是什么,都可以等待它。我不会太乐观地认为我可以放弃选项1。在这种情况下,调用者不会等待创建的任务,您可能会遇到类似的错误:“异步模块或处理程序已完成,而异步操作仍处于挂起状态”。MSDN声明async void只能“使异步事件处理程序成为可能”。
protected override void Seed(ApplicationDbContext context) {
SetupAdminAndSampleObjectsDatabase().WaitAndUnwrapException();
base.Seed(context);
}