Course contentsShow
← C#
Lesson 1111 of 1,90810. Entity Framework Core ModelingFree lesson

Database-First Workflow

Reverse engineer existing legacy databases into robust C# models.

In this lesson, you will learn how to breathe life into a legacy database by reverse-engineering its existing schema directly into your C# project.

The Database-First Approach

While "Code-First" is the industry standard for new projects, you will often inherit legacy systems where the database is the "source of truth." In these scenarios, you don't write C# classes and generate tables; instead, you point Entity Framework Core at an existing database, and it generates the DbContext and entity classes for you.

To achieve this, we use the Scaffold-DbContext command. This tool inspects your database schema, identifies tables, columns, and foreign key relationships, and maps them to C# types.

Reverse Engineering in Action

Suppose you have a legacy SQL Server database. Open your Package Manager Console and execute a command like this:

Scaffold-DbContext "Server=LegacyServer;Database=ERP_System;Trusted_Connection=True;" 
    Microsoft.EntityFrameworkCore.SqlServer 
    -OutputDir Models 
    -Context Dir Data 
    -Force

What is happening here?

  1. Connection String: EF Core connects to the live database to read the metadata (schema).
  2. Provider: You specify the driver (e.g., Microsoft.EntityFrameworkCore.SqlServer) to translate SQL structures into C# objects.
  3. Output: The -OutputDir and -ContextDir flags tell the tool where to generate your model classes and your DbContext.
  4. Force: This overwrites previous files, allowing you to re-run the process if the legacy database schema changes.

A Critical Warning

The code generated by Scaffold-DbContext is a starting point. Because legacy databases often lack proper foreign key constraints or use naming conventions that don't match C# standards, you may need to use Fluent API configurations in your OnModelCreating method to clean up the relationships. Once you reverse-engineer the database, those classes become your starting point for adding domain logic—but be careful: if you re-run the scaffold command later, you might lose your manual changes if you aren't careful about where you place your custom logic (keep customizations in partial classes!).

Key Takeaway: The Database-First workflow allows you to instantly map legacy data structures to C# objects, providing an immediate foundation for building modern applications on top of existing SQL infrastructure.