从数据库种子方法

时间:2015-05-18 01:49:38

标签: c# asynchronous asp.net-mvc-5 entity-framework-6 initializer

我正在编写一个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方法?这可能吗?

提前致谢。

1 个答案:

答案 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);
    }

希望有所帮助!