EF Core DbContext language extensions
Code:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
/// <summary>
/// Provides helper methods for working with <see cref="DbContext"/> instances in Entity Framework Core.
/// </summary>
/// <remarks>
/// This static class includes extension methods to check the existence of a database and determine
/// whether the database contains any tables. It relies on services provided by Entity Framework Core
/// to perform these operations.
/// </remarks>
internal static class DbContextHelpers
{
/// <summary>
/// Checks if the database associated with the provided <see cref="DbContext"/> exists.
/// </summary>
/// <param name="context">The database context to check for the existence of the database.</param>
/// <returns>
/// <c>true</c> if the database exists; otherwise, <c>false</c>.
/// </returns>
/// <exception cref="InvalidOperationException">
/// Thrown when the database creator service is not available in the provided context.
/// </exception>
public static bool DatabaseExists<TContext>(this TContext context) where TContext : DbContext =>
context.GetService<IDatabaseCreator>() is not RelationalDatabaseCreator databaseCreator ?
throw new InvalidOperationException("Database creator service is not available.") :
databaseCreator.Exists();
/// <summary>
/// Determines whether the database associated with the provided <see cref="DbContext"/> contains any tables.
/// </summary>
/// <typeparam name="TContext">The type of the database context, which must derive from <see cref="DbContext"/>.</typeparam>
/// <param name="context">The database context to check for the presence of tables.</param>
/// <returns>
/// <c>true</c> if the database contains one or more tables; otherwise, <c>false</c>.
/// </returns>
/// <exception cref="InvalidOperationException">
/// Thrown when the relational database creator service is not available in the provided context.
/// </exception>
public static bool HasTables<TContext>(this TContext context) where TContext : DbContext =>
context.GetService<IRelationalDatabaseCreator>() is not RelationalDatabaseCreator databaseCreator ?
throw new InvalidOperationException("Database creator service is not available.") :
databaseCreator.HasTables();
}