Build your first Hangfire job .NET8 with PostgreSQL

Pradeep Pradyumna
2 min readFeb 22, 2024

Due to premium/ non-premium member restrictions, I have shared a detailed article required to setup hangfire in .NET 8 using PostgreSQL here as well https://dev.to/pradeepradyumna/your-first-hangfire-job-fornet8-with-postgresql-30nd. Because nothing should stop you from learning!

In this article, I will share a few simple steps you will need to create your first hangfire job using .NET 8(the latest at the time of writing this article) with Postgres as the database.

Also, please be aware that in this article I’m not going to brief what Hangfire is, as there are plenty of articles already written by wise authors. :)

Alright, let’s get started.

1. First step first

We can create either an ASP.NET Core Web App or API (it doesn’t really matter what you choose). However, for simplicity, I’m using an API project targeting.NET8

2. Install Nuget Packages

You’ll need to install the following Nuget packages

Npgsql.EntityFrameworkCore.PostgreSQL
Microsoft.EntityFrameworkCore.Design
Hangfire.AspNetCore
Hangfire.PostgreSql

That’s all you need!

3. Create a DBContext

You will need a custom DBContext class to run a DB Migration

public class DefaultDbContext : DbContext
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options)
: base(options) { }
}

4. Create a DB in Postgres

Just go ahead and create a database called `HangfireSample`
This is all you need to do at the DB level!

5. Configuration

Now before you run migration configure the DB path in `appsettings.json` and update `program.cs`

"ConnectionStrings": {
"defaultConnection": "Host=localhost;Port=5432;Username=postgres;Password=YOUR_PWD;Database=HangfireSample"
}

Update the below code in `program.cs`

builder.Services.AddEntityFrameworkNpgsql().AddDbContext<DefaultDbContext>(options => {
options.UseNpgsql(builder.Configuration.GetConnectionString("defaultConnection"));
});

6. Run migration

Just open Package Manager Console and run the below commands

dotnet ef migrations add InitContext
dotnet ef database update

This will create `__EFMigrationsHistory` under `public` schema

7. Almost done

Now configure Hangfire service in `program.cs` with the below code

builder.Services.AddHangfire(x =>
x.UsePostgreSqlStorage(builder.Configuration.GetConnectionString("defaultConnection")));

And update middleware

app.UseHangfireDashboard("/dashboard");
app.UseHangfireServer();

This was all you had to do create the hangfire server and storage.

Now, let’s create a simple job.

8. First Hangfire job

Just copy the code below

BackgroundJob.Enqueue(() => Console.WriteLine("My first handfire job!"));

Now, you run the solution!

To see your job, visit

https://localhost:44397/dashboard

And if you go to https://localhost:44397/dashboard/jobs/succeeded
you’ll see the job you just executed.

Also, just you know, if you check the `HangfireSample` database, you’ll the hangfire tables would be created under `hangfire` schema.

Just for your reference here, https://github.com/pradeepradyumna/HangfireSample is the complete working sample of the code I just explained.

I hope it helped you!

--

--

Pradeep Pradyumna

Software Developer | Theater-Artist | Blogger | Husband | Father