C# Q & A

 

How to configure Entity Framework Core using Fluent API in C#?

Configuring Entity Framework Core (EF Core) using Fluent API in C# provides fine-grained control over how your entity classes map to database tables and how relationships between entities are defined. Here’s a step-by-step guide on how to configure EF Core using Fluent API:

 

  1. Create a DbContext:

   Start by creating a class that inherits from `DbContext`, which represents your database context. This class will contain DbSet properties for your entity classes and the configuration using Fluent API.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
public class YourDbContext : DbContext
{
public DbSet<EntityType> EntityTypes { get; set; }
// DbSet properties for other entities
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Fluent API configuration goes here
}
}
```
```csharp public class YourDbContext : DbContext { public DbSet<EntityType> EntityTypes { get; set; } // DbSet properties for other entities protected override void OnModelCreating(ModelBuilder modelBuilder) { // Fluent API configuration goes here } } ```
```csharp
public class YourDbContext : DbContext
{
    public DbSet<EntityType> EntityTypes { get; set; }
    // DbSet properties for other entities

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Fluent API configuration goes here
    }
}
```
  1. Configure Entity Properties:

   Inside the `OnModelCreating` method, you can configure entity properties using Fluent API. For example, to specify a maximum length for a string property, you can use the `HasMaxLength` method:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
modelBuilder.Entity<EntityType>()
.Property(e => e.PropertyName)
.HasMaxLength(50);
```
```csharp modelBuilder.Entity<EntityType>() .Property(e => e.PropertyName) .HasMaxLength(50); ```
```csharp
modelBuilder.Entity<EntityType>()
    .Property(e => e.PropertyName)
    .HasMaxLength(50);
```
  1. Define Primary Keys:

 

   To define primary keys for your entities, use the `HasKey` method:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
modelBuilder.Entity<EntityType>()
.HasKey(e => e.Id);
```
```csharp modelBuilder.Entity<EntityType>() .HasKey(e => e.Id); ```
```csharp
modelBuilder.Entity<EntityType>()
    .HasKey(e => e.Id);
```
  1. Configure Relationships:

 

   Use Fluent API to configure relationships between entities. For instance, to define a one-to-many relationship, use `HasOne` and `WithMany`:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
modelBuilder.Entity<Author>()
.HasMany(a => a.Books)
.WithOne(b => b.Author);
```
```csharp modelBuilder.Entity<Author>() .HasMany(a => a.Books) .WithOne(b => b.Author); ```
```csharp
modelBuilder.Entity<Author>()
    .HasMany(a => a.Books)
    .WithOne(b => b.Author);
```
  1. Specify Table Names:

 

   You can set custom table names using the `ToTable` method:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
modelBuilder.Entity<EntityType>()
.ToTable("CustomTableName");
```
```csharp modelBuilder.Entity<EntityType>() .ToTable("CustomTableName"); ```
```csharp
modelBuilder.Entity<EntityType>()
    .ToTable("CustomTableName");
```
  1. Indexes and Constraints:

   To define indexes and constraints, use methods like `HasIndex` and `HasCheckConstraint`:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
modelBuilder.Entity<EntityType>()
.HasIndex(e => e.SomeProperty)
.IsUnique();
modelBuilder.Entity<EntityType>()
.HasCheckConstraint("CheckConstraintName", "SomeProperty > 0");
```
```csharp modelBuilder.Entity<EntityType>() .HasIndex(e => e.SomeProperty) .IsUnique(); modelBuilder.Entity<EntityType>() .HasCheckConstraint("CheckConstraintName", "SomeProperty > 0"); ```
```csharp
modelBuilder.Entity<EntityType>()
    .HasIndex(e => e.SomeProperty)
    .IsUnique();

modelBuilder.Entity<EntityType>()
    .HasCheckConstraint("CheckConstraintName", "SomeProperty > 0");
```
  1. Seed Data:

 

   You can also seed initial data using Fluent API. Override the `OnModelCreating` method and use the `HasData` method:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```csharp
modelBuilder.Entity<EntityType>()
.HasData(
new EntityType { Id = 1, Property1 = "Value1", Property2 = "Value2" },
// Add more seed data
);
```
```csharp modelBuilder.Entity<EntityType>() .HasData( new EntityType { Id = 1, Property1 = "Value1", Property2 = "Value2" }, // Add more seed data ); ```
```csharp
modelBuilder.Entity<EntityType>()
    .HasData(
        new EntityType { Id = 1, Property1 = "Value1", Property2 = "Value2" },
        // Add more seed data
    );
```

By following these steps and utilizing Fluent API in EF Core, you can tailor the database schema and entity behavior to your specific application requirements. It offers a powerful way to configure your data model with precision and flexibility.

 

Previously at
Flag Argentina
Mexico
time icon
GMT-6
Experienced Backend Developer with 6 years of experience in C#. Proficient in C#, .NET, and Java.Proficient in REST web services and web app development.