如何使实体框架在DbContext外使用它之前创建数据库

本文关键字:数据库 创建 实体 何使 框架 DbContext | 更新日期: 2023-09-27 18:18:27

在某些测试环境中,我已经配置了我的应用程序,以便在数据库不存在时使用实体框架迁移创建它的数据库的新实例。

我也在使用Hangfire,并在我的OWIN启动类中配置了它使用SQL Server。目前,我正在实例化DbContext的一个新实例,以便在配置Hangfire使用数据库之前强制创建数据库:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        using (var dbContext = new MyDbContext())
        {
            // Force database creation before configuring Hangfire to use it.
        }
        GlobalConfiguration.Configuration.UseSqlServerStorage("myConnection");
        // ...
    }
}

这感觉有点粗糙。推荐的方法是什么,以确保实体框架创建数据库之前,它是DbContext外使用?

如何使实体框架在DbContext外使用它之前创建数据库

事实证明,问题中的代码片段本身并不一定足够(取决于平台和其他EF配置设置),所以我们实际上现在在代码中明确表示(根据Diana的评论),这也使它感觉不那么粗糙:

// Trigger database creation before Hangfire tries to use it.
var initializer = new MigrateDatabaseToLatestVersion<MyDbContext, MyConfiguration>(true);
Database.SetInitializer(initializer);
var connectionString = this.Configuration.GetConnectionString("MyConnectionString");
using (var dbContext = new MyDbContext(connectionString))
{
    dbContext.Database.Initialize(false);
}