abpframework/abp · error · CliUsageException

The option you provided for Database Provider is invalid!

Error message

The option you provided for Database Provider is invalid!

What it means

Thrown by ProjectCreationCommandBase.GetDatabasePreference when the database provider option value does not match 'ef', 'entityframeworkcore', 'mongo', or 'mongodb' (case-insensitive). The method parses the -d/--database-provider option and maps known values to DatabaseProvider enum members; any unrecognized value falls through to a CliUsageException via ExceptionMessageHelper.GetInvalidOptionExceptionMessage.

Source

Thrown at framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs:394

    {
        var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseProvider.Short, Options.DatabaseProvider.Long);

        if (optionValue == null)
        {
            return DatabaseProvider.NotSpecified;
        }

        if (optionValue.Equals("ef", StringComparison.InvariantCultureIgnoreCase) || optionValue.Equals("entityframeworkcore", StringComparison.InvariantCultureIgnoreCase))
        {
            return DatabaseProvider.EntityFrameworkCore;
        }

        if (optionValue.Equals("mongo", StringComparison.InvariantCultureIgnoreCase) || optionValue.Equals("mongodb", StringComparison.InvariantCultureIgnoreCase))
        {
            return DatabaseProvider.MongoDb;
        }

        throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage("Database Provider"));
    }

    protected virtual async Task RunGraphBuildForMicroserviceServiceTemplate(ProjectBuildArgs projectArgs)
    {
        if (MicroserviceServiceTemplateBase.IsMicroserviceServiceTemplate(projectArgs.TemplateName))
        {
            await EventBus.PublishAsync(new ProjectCreationProgressEvent
            {
                Message = "Building the microservice solution"
            }, false);

            CmdHelper.RunCmd("dotnet build /graphbuild", projectArgs.OutputFolder);
        }
    }

    protected async Task RunInstallLibsForWebTemplateAsync(ProjectBuildArgs projectArgs)
    {
        if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) ||

View on GitHub (pinned to 7ed43b1931)

Solutions

  1. Use 'ef' or 'entityframeworkcore' for EF Core provider: `abp new MyProject -d ef`
  2. Use 'mongo' or 'mongodb' for MongoDB provider: `abp new MyProject -d mongodb`
  3. Note: the specific database engine (SQL Server, MySQL, PostgreSQL, etc.) is controlled by a separate --database-management-system option, not this one

Example fix

// before
abp new MyProject -d sqlserver

// after
abp new MyProject -d ef
// then specify the engine separately if needed
Defensive patterns

Strategy: validation

Validate before calling

// Validate database provider before project creation
var validProviders = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "ef", "entityframeworkcore", "mongo", "mongodb" };
if (!validProviders.Contains(dbProviderValue))
{
    Console.Error.WriteLine("Error: Database provider must be 'ef' or 'mongodb'.");
    return;
}

Type guard

// Type guard for valid database provider values
static bool IsValidDatabaseProvider(string value) =>
    value.Equals("ef", StringComparison.OrdinalIgnoreCase) ||
    value.Equals("entityframeworkcore", StringComparison.OrdinalIgnoreCase) ||
    value.Equals("mongo", StringComparison.OrdinalIgnoreCase) ||
    value.Equals("mongodb", StringComparison.OrdinalIgnoreCase);

Try / catch

try
{
    await projectCreationCommand.ExecuteAsync(commandLineArgs);
}
catch (CliUsageException ex) when (ex.Message.Contains("Database Provider is invalid"))
{
    logger.LogError("Use -d ef or -d mongodb. The engine (SQL Server/MySQL/etc.) is a separate option.");
}

Prevention

When it happens

Trigger: Passing `abp new MyProject -d sqlserver` or any provider string not in {ef, entityframeworkcore, mongo, mongodb}. The string comparison fails all if-branches and reaches the throw statement.

Common situations: Developer assumes database provider values map to database engines (e.g., passing 'sqlserver' or 'postgres') rather than the two provider types. Confusion between database provider (EF/Mongo) and database management system (SQL Server/MySQL/etc., which is a separate option).

Related errors


AI-assisted analysis of abpframework/abp@7ed43b1931 (2026-08-13). Data as JSON: /api/errors/4d504d76c1f05138. Report an issue: GitHub.