EF Core如何从实体生成数据库表 EF Core Code First完整流程

EF Core Code First 通过迁移实现从C#实体类自动生成数据库表,流程为:定义实体类和DbContext→安装工具并添加初始迁移→执行Update-Database创建库表→后续修改实体后添加增量迁移并更新。

EF Core 使用 Code First 方式从 C# 实体类自动生成数据库表,核心是通过 迁移(Migrations) 实现模型到数据库的同步。整个流程不依赖已有数据库,而是“先写类、再建库”。下面是一套清晰、可落地的完整步骤。

1. 定义实体类和 DbContext

这是起点。实体类描述数据结构,DbContext 管理实体与数据库之间的映射关系。

例如:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public decimal Price { get; set; }
}

public class AppDbContext : DbContext { public DbSet Products { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseSqlServer("Server=.;Database=MyAppDb;Trusted_Connection=true;");

}

注意:连接字符串可根据环境放在 appsettings.json 中,用 OnConfiguring 或依赖注入方式配置更规范。

2. 安装 EF Core 工具并初始化迁移

确保项目已安装以下 NuGet 包:

  • Microsoft.EntityFrameworkCore.SqlServer(数据库提供程序)
  • Microsoft.EntityFrameworkCore.Tools(设计时工具,用于命令行)

包管理器控制台(PMC).NET CLI 中执行:

# PMC(需选择默认项目为含 DbContext 的项目)
Add-Migration InitialCreate

或 CLI(在项目文件所在目录运行)

dotnet ef migrations add InitialCreate

这会在项目中生成一个 Migrations/xxx_InitialCreate.cs 文件,包含 Up()(建表)和 Down()(回滚)方法。

3. 应用迁移创建数据库和表

此时数据库还不存在,首次运行迁移会自动创建库和表:

# PMC
Update-Database

CLI

dotnet ef database update

EF Core 会:

  • 检查连接字符串指向的实例是否存在该数据库
  • 若不存在,则新建数据库
  • 按迁移文件中的 Up() 方法执行建表、主键、索引等操作

成功后,SQL Server 中就能看到 Products 表,字段与 Product 类完全对应。

4. 后续修改实体并同步数据库

当业务变化需要加字段、改类型或新增实体时:

  • 修改实体类(如给 ProductCategory 属性)
  • 再次运行 Add-Migration AddCategory(命名自定义)
  • 再运行 Update-Database

EF Core 会基于当前模型与上一次迁移的快照(xxx_InitialCreate_Snapshot.cs)计算差异,生成增量迁移脚本,安全升级结构。

基本上就这些。关键点在于:实体类即契约、迁移是版本控制、Update-Database 是最终落地动作。只要模型定义清晰、迁移及时提交,Code First 就非常稳健可靠。