使用迁移动态创建数据库

时间:2017-11-12 09:17:00

标签: c# asp.net-core ef-migrations asp.net-core-2.0 ef-core-2.0

我有一个应用程序,当用户注册时,将为该特定用户创建一个新的数据库。我的问题:这是基于EF Core 2.0 Code First动态创建数据库并应用迁移的正确方法吗?

假设我有我的上下文:CustomDbContext,并且在注册操作中我喜欢这样:

    [HttpPost]
    public async Task<IActionResult> Register(RegisterViewModel model)
    {           

        //register user logic here

        using (CustomDbContext ctx = new CustomDbContext())
        {
             await ctx.Database.EnsureCreatedAsync();   
             await ctx.Database.MigrateAsync();
        }           

        return RedirectToPage("/Index");
    }

await ctx.Database.EnsureCreatedAsync();是否也适用迁移?或者我需要运行await ctx.Database.MigrateAsync();来应用它们?

1 个答案:

答案 0 :(得分:1)

ctx.Database.MigrateAsync(); 

将创建数据库以及应用迁移。无需两者兼顾。

另一方面,这可能不应该在Controller动作中调用,而是在DataAccess层中的某个地方调用,理想情况下调用较少以提高性能。我建议在首次启动Web应用程序或回收等时执行此操作。