Configurations in Entity Framework Core

Configurations in Entity Framework Core

In the previous tutorial I explained the Conventions in Entity Framework Core. If you want to override the conventions then apply the configurations and customize the EF Core model to database mappings.

There are 2 Configuration Methods in EF Core:

  • 1. Data Annotation Attributes
  • 2. Fluent API

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 I have applied Data Annotation Attributes to the domain classes 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; }

public class CompanyContext : DbContext
    public DbSet<City> City { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        if (!optionsBuilder.IsConfigured)

Once you apply Migration you will get 2 database tables created with different names (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 UI. I have covered there uses in my tutorial called Model Validation in ASP.NET Core from Beginning to Expert.


The 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 database table.

The 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.

TBL City and TBL Country

Understanding how Data Annotation Attributes work

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