I created REST API's in .NET 5 and everything was working perfectly, but recently I moved to .NET 6 and realized that no startup.cs class is present. How do I add the DB Context in .NET 6 since there is no startup.cs?
-
1Have you seen [Minimal APIs overview](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0)? Besides, not using the minimal API (and Startup.cs for that matter) equally works in .NET 6 if you have existing code. – Christian.K Feb 02 '22 at 08:12
-
3See also the migration guidance at https://learn.microsoft.com/en-us/aspnet/core/migration/50-to-60?view=aspnetcore-6.0&tabs=visual-studio – jeroenh Feb 02 '22 at 08:13
-
1It is no longer needed. But if you really want to add it back, you may refer to this blog: https://www.strathweb.com/2022/02/using-an-existing-startup-class-with-asp-net-6-minimal-hosting-model/ – Rosdi Kasim Nov 06 '22 at 06:49
6 Answers
In .NET 6 Microsoft has removed the Startup.cs class. Just go to the program.cs file and there you can add a connection string then you've to use builder.Services.AddDbContext
The old way is
services.AddDbContext
Just use
builder.Services
and then you can achieve what you want.

- 1,366
- 1
- 9
- 6
-
Oh yeah that's pretty awesome. I've never thought about this that we can call AddDbContext with the builder class. Thanks. – Hernan Garcia Feb 02 '22 at 08:17
-
4You can still use a Startup class if you want. You'll just have to use an older template and upgrade or you can make the previous style Program and Startup classes manually. – juunas Feb 02 '22 at 08:17
-
2the builder resolves by 'var builder = WebApplication.CreateBuilder(args);' which can later be used to configure the DbConetxt , AutoMapper etc.. eg : builder.Services.AddDbContext
(opt=>opt.UseInMemoryDatabase("InMem")); After executing the build (var app = builder.Build();) that resolves to IApplicationBuilder Later, that 'app' is used to call the RUN / HTTPRedirection etc.. – jidh Jun 11 '22 at 11:09 -
1@asfend Shouldn't you need to mention that it needs to be written in `Program.cs` file instead? – hiFI Jul 14 '22 at 03:56
In .NET 6, they unified Startup.cs
and Program.cs
into one Program.cs.
Now registering middleware, services and adding DbContext and everything else into the Program.cs file.
Here is an example of a Program.cs file:
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
//Register services here
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection")
));
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
//builder.Services.AddAuthentication(...)
var app = builder.Build();
//app.UseAuthentication();
For more information visit this thread.

- 13,982
- 14
- 97
- 173
Create a new class called "Startup.cs". Paste this template in it;
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
this.Configuration = configuration;
}
// This method gets called by the runtime. Use this method to add serices to the container.
public void ConfigureServices(IServiceCollection services)
{
//services.AddDbContext...
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(WebApplication app, IWebHostEnvironment env)
{
}
}
Now, you can Modify your Program.cs class to look like this;
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration); // My custom startup class.
startup.ConfigureServices(builder.Services); // Add services to the container.
var app = builder.Build();
startup.Configure(app, app.Environment); // Configure the HTTP request pipeline.
app.Run();
Now, things are better organized, in the old way. People coming from ASP.NET Core 5 will feel right at home. What you put inside ConfigureServices() and Configure() will depend on your project and needs. For example, here is how an example ASP.NET Core 7 MVC project's Startup.cs would look like as a starting point;
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
this.Configuration = configuration;
}
// This method gets called by the runtime. Use this method to add serices to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(WebApplication app, IWebHostEnvironment env)
{
if (!env.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
}
}

- 681
- 3
- 15
To be clear for those trying to add transient, singleton or scoped services...
Previously in Startup.cs, adding a service looked like this:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IEmailService, EmailService>();
}
Now instead in Program.cs, it looks like this:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTransient<IEmailService, EmailService>();

- 18,680
- 13
- 103
- 118
-
Should you do this even if your application isn't a "web application" (not an HTTP microservice) but instead a console job that for example... listens to RabbitMQ or processes a file? – Brandon Ros Jan 26 '23 at 16:33
-
@BrandonRos Sure you could find dependency injection useful in a console app, for example, configuration data. Look up "when should you use dependency injection". – Andrew Jan 26 '23 at 17:48
I prefer to create an extension class that can be very clean
public static class HostingExtension
{
/// <summary>
/// Add services to the container.
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static WebApplication ConfigureServices(this WebApplicationBuilder builder)
{
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
return builder.Build();
}
/// <summary>
/// Configure the HTTP request pipeline.
/// </summary>
/// <param name="app"></param>
/// <returns></returns>
public static WebApplication ConfigurePipeline(this WebApplication app)
{
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
return app;
}
}
and then just write this to program.cs
var builder = WebApplication.CreateBuilder(args);
builder.ConfigureServices().ConfigurePipeline().Run();

- 134
- 7
Go to the program.cs, and then you have to use the builder.Services
Here is an example of a Program.cs file:
var connectionString = builder.Configuration.GetConnectionString("AppDb");
builder.Services.AddDbContext<DbContext>(x => x.UseSqlServer(connectionString));

- 11
- 3