Skip to content

1. 简介:这是什么?为什么需要它?

Microsoft.EntityFrameworkCore.Tools 是一个 NuGet 包,它为 Visual Studio 中的 包管理器控制台 (Package Manager Console) 添加了一系列专门用于 Entity Framework Core (EF Core) 的命令行工具。

简单来说,如果你正在使用 EF Core 并希望通过命令行来管理数据库结构(例如,根据代码模型自动更新数据库表),那么这个工具包就是 必不可少 的。它极大地简化了数据库的开发和维护工作流程。

核心用途:

  • 数据库迁移 (Migrations): 根据 C# 模型代码的变更,自动生成并应用数据库结构更新。
  • 反向工程 (Scaffolding): 读取现有数据库的结构,并自动生成对应的 C# 实体类和 DbContext

这个包是开发时的依赖项,意味着它只在开发环境中使用,不会被打包到你的最终应用程序中。

2. 安装指南

安装过程非常简单,直接在 Visual Studio 中进行。

  1. 打开项目: 在 Visual Studio 中打开你的解决方案。

  2. 定位控制台:

    • 点击顶部菜单栏的 “工具 (Tools)” -> “NuGet 包管理器 (NuGet Package Manager)” -> “包管理器控制台 (Package Manager Console)”
  3. 选择目标项目:

    • 在控制台窗口的 “默认项目” 下拉列表中,选择你希望安装此工具包的项目(通常是你的数据访问层或包含 DbContext 的项目)。
  4. 执行命令:

    • 在控制台提示符 PM> 后输入以下命令,然后按回车:
    powershell
    Install-Package Microsoft.EntityFrameworkCore.Tools

安装完成后,你的项目文件 (.csproj) 中会增加一个对此包的引用。现在你就可以使用所有 EF Core 的命令行工具了。

依赖提醒: 请确保你的项目也已安装了相应的数据库提供程序,例如:

  • SQL Server: Microsoft.EntityFrameworkCore.SqlServer
  • PostgreSQL: Npgsql.EntityFrameworkCore.PostgreSQL
  • SQLite: Microsoft.EntityFrameworkCore.Sqlite

3. 核心功能一:数据库迁移 (Migrations)

这是 EF Core Tools 最强大的功能。它让你能够将模型的变更以“迁移”的形式记录下来,并安全地应用到数据库。

常用迁移命令

Add-Migration <迁移名称>

  • 作用: 创建一个新的迁移。EF Core 会比较当前的模型快照和你最新的模型代码,然后生成一个包含差异更新的迁移文件。
  • 命名建议: 迁移名称应当清晰地描述本次变更的内容,例如 AddUserEmailColumnCreateProductsTable
  • 示例:
    powershell
    PM> Add-Migration InitialCreate
    执行后,项目中会生成一个 Migrations 文件夹,里面包含一个 <时间戳>_InitialCreate.cs 文件。该文件中有两个核心方法:
    • Up(): 应用此迁移的逻辑(例如 CREATE TABLE)。
    • Down(): 撤销此迁移的逻辑(例如 DROP TABLE)。

Update-Database

  • 作用: 将所有尚未应用的迁移更新到数据库。它会按照时间顺序执行所有迁移文件中的 Up() 方法。
  • 示例:
    powershell
    PM> Update-Database
  • 高级用法 (回滚): 你可以通过指定一个已存在的迁移名称,来将数据库回滚到那个迁移完成时的状态。若要回滚所有迁移,可使用 0
    powershell
    # 回滚到名为 "AddUserEmailColumn" 的迁移完成后的状态
    PM> Update-Database AddUserEmailColumn
    
    # 回滚所有迁移,清空数据库(仅限EF Core管理的表)
    PM> Update-Database 0

Remove-Migration

  • 作用: 移除最新创建的、但 尚未应用 到数据库的迁移。它会删除对应的迁移文件并更新模型快照。
  • 注意: 如果你已经执行了 Update-Database,则必须先回滚数据库,才能安全地移除迁移。
  • 示例:
    powershell
    PM> Remove-Migration

Script-Migration

  • 作用: 不直接操作数据库,而是生成一个包含所有变更的 SQL 脚本。这个脚本可以保存下来,交由数据库管理员 (DBA) 在生产环境等受控环境中执行。
  • 示例:
    powershell
    # 生成从数据库当前状态到最新迁移的完整SQL脚本
    PM> Script-Migration
    
    # 生成从零开始到最新迁移的完整SQL脚本
    PM> Script-Migration 0
    
    # 生成从一个指定迁移到另一个指定迁移的SQL脚本
    PM> Script-Migration <起始迁移名称> <结束迁移名称>

4. 核心功能二:反向工程 (Scaffolding)

当你有一个已经存在的数据库,并希望开始用 EF Core 来管理它时,反向工程可以为你自动生成所有必要的代码。

Scaffold-DbContext 命令

  • 作用: 连接到数据库,分析其结构,并生成 DbContext 类和所有表的实体类。

  • 语法: Scaffold-DbContext "<连接字符串>" <数据库提供程序包名> [选项]

  • 示例: 假设我们有一个 SQL Server 数据库,希望将生成的代码放在 Models 文件夹中。

    powershell
    PM> Scaffold-DbContext "Server=.\SQLExpress;Database=MyLegacyDB;Trusted_Connection=True;TrustServerCertificate=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
  • 关键参数和选项:

    • <连接字符串>: (必需) 指向你的数据库的连接字符串。
    • <数据库提供程序包名>: (必需) 你项目中安装的数据库提供程序 NuGet 包的名称。
    • -OutputDir <文件夹名>: 指定生成的 C# 文件存放的文件夹。
    • -Context <DbContext名称>: 为生成的 DbContext 指定一个自定义名称。
    • -Tables <表1>, <表2>: 只为指定的某些表生成实体类。
    • -UseDataAnnotations: 使用数据注解 ([Key], [Required]) 来配置模型,而不是默认的 Fluent API (modelBuilder.Entity(...))。
    • -Force: 如果指定文件夹中已存在同名文件,则强制覆盖它们。

5. 对比:Package Manager Console 与 dotnet ef

除了本文重点介绍的 Microsoft.EntityFrameworkCore.Tools (用于包管理器控制台),还有一个跨平台的命令行工具 dotnet-ef。它们的功能几乎完全相同,只是使用环境和命令格式不同。

场景/工具Microsoft.EntityFrameworkCore.Tools (本文)dotnet-ef
使用环境Visual Studio 的 包管理器控制台任何终端/命令行窗口 (CMD, PowerShell, Bash)
平台主要用于 Windows 上的 Visual Studio跨平台 (Windows, macOS, Linux)
安装方式Install-Package Microsoft.EntityFrameworkCore.Toolsdotnet tool install --global dotnet-ef
添加迁移Add-Migration <Name>dotnet ef migrations add <Name>
更新数据库Update-Databasedotnet ef database update
反向工程Scaffold-DbContext ...dotnet ef dbcontext scaffold ...