Configurations in Entity Framework Core

Configurations in Entity Framework Core

Entity Framework Core Configurations allow us to override the default conventions in order to create database schema and mappings in the way we want. We already saw the concept of Conventions in Entity Framework Core where we understood how default conventions work. If we want to override the conventions then apply the configurations and customize the EF Core model to database mappings.

There are 2 Entity Framework Core Configuration Methods:

  • 1. Data Annotation Attributes
  • 2. Fluent API

Let us understand them one by one.

Data Annotation Attributes

These are the .NET Attributes that can be applied to the domain classes and their properties. The Data Annotation attributes are included in separate namespace called System.ComponentModel.DataAnnotations.

Let me demonstrate how to apply these Data Annotation Attributes to the domain classes in order to configure database tables and override the default Conventions of Entity Framework Core.

In the below code we have applied Data Annotation Attributes to the 2 domain classes (Country & City) and their properties.

public class City
    public int KeyId { get; set; }
    [Column("CityName", TypeName = "varchar(25)")]
    public string Name { get; set; }
    public int Population { get; set; }
    public Country Country { get; set; } 

public class Country
    public int KeyId { get; set; }
    public string Name { get; set; }

Once we apply Entity Framework Core Migration then 2 database tables will be created due to [Table("Name")] attribute on the classes. These tables are:

  • 1. TBL_City
  • 2. TBL_Country
Data Annotation Attributes are widely used in validating input controls placed on the view. We have covered there uses in the article called Model Validation in ASP.NET Core from Beginning to Expert.

The table called TBL_City has:

  • KeyId column as primary key.
  • CityName column with data type varchar(25).
  • FKid as foreign key column.
Since the Population property has [NotMapped] attribute so no column is made for it on the TBL_City table.

The table called TBL_Country has:

  • KeyId column as primary key.
  • Name column with data type nvarchar(20).

See the below image which shows the snapshot of these 2 database tables.

entity framework core data annotations title=

Common Entity Framework Core Data Annotations

Attribute Description
Table Applied on entity class to give a name to database table.
Column Applied on a property to give column name, order and data type.
Key Sets the property as primary key for the table.
ForeignKey Applied to a property to mark it as foreign key.
NotMapped Can be applied to entity class or property for not generating a corresponding table or column in the database.
MaxLength Sets the max length for the table column.
Required Can be applied on properties to make the corresponding column on the table as not null.

Fluent API

Another way to configure domain classes is by using Entity Framework Fluent API. You will learn about Fluent API by reading these 4 tutorials.

Download the source code:


  • linkedin
  • reddit


I hope you enjoyed reading this tutorial. If it helped you then consider buying a cup of coffee for me. This will help me in writing more such good tutorials for the readers. Thank you. Buy Me A Coffee donate