EntityFrameworkCore.NamingConventions 8.0.0

dotnet add package EntityFrameworkCore.NamingConventions --version 8.0.0                
NuGet\Install-Package EntityFrameworkCore.NamingConventions -Version 8.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EntityFrameworkCore.NamingConventions" Version="8.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add EntityFrameworkCore.NamingConventions --version 8.0.0                
#r "nuget: EntityFrameworkCore.NamingConventions, 8.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install EntityFrameworkCore.NamingConventions as a Cake Addin
#addin nuget:?package=EntityFrameworkCore.NamingConventions&version=8.0.0

// Install EntityFrameworkCore.NamingConventions as a Cake Tool
#tool nuget:?package=EntityFrameworkCore.NamingConventions&version=8.0.0                

Naming Conventions for Entity Framework Core Tables and Columns

Nuget

By default, EF Core will map to tables and columns named exactly after your .NET classes and properties. For example, mapping a typical Customer class to PostgreSQL will result in SQL such as the following:

CREATE TABLE "Customers" (
    "Id" integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    "FullName" text NULL,
    CONSTRAINT "PK_Customers" PRIMARY KEY ("Id")
);

SELECT c."Id", c."FullName"
    FROM "Customers" AS c
    WHERE c."FullName" = 'John Doe';

For PostgreSQL specifically, this forces double-quotes to be added since unquoted identifiers are automatically converted to lower-case - and all those quotes are an eye-sore. But even if we're using another database such as SQL Server, maybe we just hate seeing upper-case letters in our database, and would rather have another naming convention.

Down with same-name identifier tyranny! Simply add a reference to EntityFrameworkCore.NamingConventions and enable a naming convention in your model's OnConfiguring method:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseNpgsql(...)
        .UseSnakeCaseNamingConvention();

This will automatically make all your table and column names have snake_case naming:

CREATE TABLE customers (
    id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    full_name text NULL,
    CONSTRAINT "pk_customers" PRIMARY KEY (id)
);

SELECT c.id, c.full_name
        FROM customers AS c
        WHERE c.full_name = 'John Doe';

Supported naming conventions

  • UseSnakeCaseNamingConvention: FullName becomes full_name
  • UseLowerCaseNamingConvention: FullName becomes fullname
  • UseCamelCaseNamingConvention: FullName becomes fullName
  • UseUpperCaseNamingConvention: FullName becomes FULLNAME
  • UseUpperSnakeCaseNamingConvention: FullName becomes FULL_NAME

Have another naming convention in mind? Open an issue or even submit a PR - it's pretty easy to do!

Important notes

  • This repository is a rewrite of EFCore.NamingConventions
  • If you have an existing database, adding this naming convention will cause a migration to produced, renaming everything. Be very cautious when doing this (the process currently involves dropping and recreating primary keys).
  • This plugin will work with any relational database provider and isn't related to PostgreSQL or Npgsql in any way.
  • This is a community-maintained plugin: it isn't an official part of Entity Framework Core and isn't supported by Microsoft in any way.
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on EntityFrameworkCore.NamingConventions:

Package Downloads
Xerris.DotNet.Core

Package Description

Xerris.DotNet.Data.PostgreSQL

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
8.0.0 86,258 12/17/2023
8.0.0-rc.4 7,383 11/6/2023
8.0.0-rc.3 1,039 10/9/2023
8.0.0-rc.2 87 10/9/2023
8.0.0-rc.1 82 10/9/2023