File: DbContextHealthStartup.cs
Web Access
Project: src\src\Middleware\HealthChecks\test\testassets\HealthChecksSample\HealthChecksSample.csproj (HealthChecksSample)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.EntityFrameworkCore;
 
namespace HealthChecksSample;
 
// Pass in `--scenario dbcontext` at the command line to run this sample.
public class DbContextHealthStartup
{
    public DbContextHealthStartup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
 
    public IConfiguration Configuration { get; }
 
    public void ConfigureServices(IServiceCollection services)
    {
        // Registers required services for health checks
        services.AddHealthChecks()
 
            // Registers a health check for the MyContext type. By default the name of the health check will be the
            // name of the DbContext type. There are other options available through AddDbContextCheck to configure
            // failure status, tags, and custom test query.
            .AddDbContextCheck<MyContext>();
 
        // Registers the MyContext type and configures the database provider.
        //
        // The health check added by AddDbContextCheck will create instances of MyContext from the service provider,
        // and so will reuse the configuration provided here.
        services.AddDbContext<MyContext>(
            options => options.UseSqlite(Configuration["ConnectionStrings:DefaultConnection"]));
    }
 
    public void Configure(IApplicationBuilder app)
    {
        // This will register the health checks middleware at the URL /health.
        //
        // Since this sample doesn't do anything to create the database by default, this will
        // return unhealthy by default.
        //
        // You can to to /createdatabase and /deletedatabase to create and delete the database
        // (respectively), and see how it immediately effects the health status.
        //
        app.UseHealthChecks("/health");
 
        app.Map("/createdatabase", b => b.Run(async (context) =>
        {
            await context.Response.WriteAsync("Creating the database...\n");
            await context.Response.Body.FlushAsync();
 
            var myContext = context.RequestServices.GetRequiredService<MyContext>();
            await myContext.Database.EnsureCreatedAsync();
 
            await context.Response.WriteAsync("Done\n");
            await context.Response.WriteAsync("Go to /health to see the health status\n");
        }));
 
        app.Map("/deletedatabase", b => b.Run(async (context) =>
        {
            await context.Response.WriteAsync("Deleting the database...\n");
            await context.Response.Body.FlushAsync();
 
            var myContext = context.RequestServices.GetRequiredService<MyContext>();
            await myContext.Database.EnsureDeletedAsync();
 
            await context.Response.WriteAsync("Done\n");
            await context.Response.WriteAsync("Go to /health to see the health status\n");
        }));
 
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Go to /health to see the health status\n");
            await context.Response.WriteAsync("Go to /createdatabase to create the database\n");
            await context.Response.WriteAsync("Go to /deletedatabase to delete the database\n");
        });
    }
}