Hangfire Discussion

Automatically create database


#1

How can I have the Hangfire database created automatically? I know it will create the schema & tables, but I’d like the database itself to be created if it doesn’t exist. This removes a manual step as part of deployments.


#2

If you are using Entity Framework you can use Database.Migrate() in your DbContext.


#3

Thanks for the response @Mercury.

Is the Hangfire DbContext exposed? What namespace is it in? Or are you suggesting creating a “dummy” DbContext specifically to be able to call Migrate?


#4

@alelefant Did you ever figure this problem out? If so, what was your solution?


#5

@Matt_Alexander Nope. It doesn’t seem like there’s a configurable way of doing this without rolling something yourself. We ended up creating the database manually.


#6

Thanks @alelefant that’s what I ended up doing to.


#7

Personnally I’ve written a little helper function which create the database at startup using System.Data.SqlClient.

private string GetHangfireConnectionString()
        {
            string dbName = SettingsHelper.HangfireDbName;
            string connectionStringFormat = SettingsHelper.HangfireConnectionString;

            using (var connexion = new SqlConnection(string.Format(connectionStringFormat, "master")))
            {
                connexion.Open();

                using (var command = new SqlCommand(string.Format(
                    @"IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'{0}') 
                                    create database [{0}];
                      ", dbName), connexion))
                {
                    command.ExecuteNonQuery();
                }
            }

            return string.Format(connectionStringFormat, dbName);
        } 

Then during startup

var connectionString = GetHangfireConnectionString();
GlobalConfiguration.Configuration.UseSqlServerStorage(connectionString);