C# 控制台使用 SQL Server ,使用 EF 反向工程实践 Database First / Code First
参考
- DeepSeek
- 豆包
- https://learn.microsoft.com/zh-cn/ef/core/cli/powershell#scaffold-dbcontext
- https://learn.microsoft.com/zh-cn/ef/core/cli/powershell
- https://learn.microsoft.com/zh-cn/ef/core/managing-schemas/scaffolding/?tabs=vs
- https://learn.microsoft.com/zh-cn/ef/core/dbcontext-configuration/
- https://www.bilibili.com/video/BV1X54y1j7HV
环境
| 软件/系统 | 版本 | 说明 | 
|---|---|---|
| Windows | windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器 | |
| Microsoft Visual Studio | Community 2022 (64 位) - Current 版本 17.13.6 | |
| .NET SDK | 6.0 | |
| Microsoft.EntityFrameworkCore.SqlServer | 7.0.20 | 项目依赖,7.x 版本兼容 .net 6.0 | 
| Microsoft.EntityFrameworkCore.Design | 7.0.20 | 项目依赖 | 
| Microsoft.EntityFrameworkCore.Tools | 7.0.20 | 项目依赖 | 
| SQL Server Management Studio | 20.2.37.0 | |
| Windows Server | Windows Server 2019 Standard Evaluation (10.0) | 服务器 | 
| SQL Server | Microsoft SQL Server 2019 Enterprise Edition | 服务器 | 
其他
- 如果要使用 dotnet-ef相关命令,需要先安装dotnet-ef命令# 1. 查看所有已安装工具 dotnet tool list -g # 2. 安装生成工具 dotnet tool install -g dotnet-ef
- 在 ASP .NET Core 中,需要将数据库对象托管给应用管理、实例化,就可以在控制器中自动注入并使用了。
正文
Database First
首次迁移使用不需要关注6、7、9步骤,6、7、9步骤是为了演示后续新增新的模型/数据表的操作。
步骤
- 在数据库中创建数据库:School_2025_Xiaqiuchu,数据表:Students、ClassRooms、Teachers、Courses、ClassRoom_Course_Teacher。
- 创建控制台程序,基于 .NET 6 ,不使用顶级语句。
- 程序包管理控制台运行以下命令,安装项目依赖Install-Package Microsoft.EntityFrameworkCore.Design -Version 7.0.20 Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 7.0.20 # 这个应该好像不用安装 # Install-Package Install-Package Microsoft.EntityFrameworkCore.Tools -Version 7.0.20
- 程序包管理控制台运行以下命令为指定的数据库生成Contoso和实体类型类。(具体命令参数含义请参考微软文档;支持指定数据库和数据表)# ef 命令: # dotnet ef dbcontext scaffold "Data Source=数据库IP;Database=School_2025_Xiaqiuchu;User ID=数据库登录账号;Password=数据库登录账号密码;Connect Timeout=30;Encrypt=True;Trust Server Certificate=True;Application Intent=ReadWrite;Multi Subnet Failover=False" Microsoft.EntityFrameworkCore.SqlServer -c ApplicationDbContext --context-dir Data --output-dir Models # 程序包管理控制台 Scaffold-DbContext 命令: Scaffold-DbContext "Data Source=数据库IP;Database=School_2025_Xiaqiuchu;User ID=数据库登录账号;Password=数据库登录账号密码;Connect Timeout=30;Encrypt=True;Trust Server Certificate=True;Application Intent=ReadWrite;Multi Subnet Failover=False" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -ContextDir Data -Context SchoolContent
生成迁移
- 将已有数据库生成迁移,并设置迁移名称(名称为自定义,不一定是 InitialCreate)。Add-Migration InitialCreate
追加数据表 (Model To Database)
- 新增对应的表模型文件 Models/Book.cs,并注册到数据库 Content 文件内。
 在using System; using System.Collections.Generic; namespace ConsoleApp1.Models; public partial class Book { public int Id { get; set; } public string Title { get; set; } = null!; }Data/SchoolContent.cs中追加新增数据库模型public virtual DbSet<Book> Books { get; set; }
- 创建迁移,并指定迁移名称Add-Migration AddBook
迁移
- 通过 Get-Migration命令,可以查看迁移列表与状态。PM> Get-Migration Build started... Build succeeded. id name safeName applied -- ---- -------- ------- 20250509101113_InitialCreate InitialCreate InitialCreate False 20250509101124_AddBook AddBook AddBook False
- 删除已有数据库(注意:此处暂未找到更好的解决办法,不删除数据库,直接运行 Update-Database会出现数据表已存在的问题;正式项目请参考手动或通过创建数据库更改脚本进行此更改。)# Drop-Database
- 更新数据库Update-Database
后续
- 这样后续就可以通过添加模型文件->生成迁移->更新数据库的方式进行管理数据库了
Code First
- 参考 https://www.cnblogs.com/xiaqiuchu/p/18867682 文章的代码部分,将相关模型文件、Content 类准备好。
- 程序包管理控制台运行以下命令,安装项目依赖Install-Package Microsoft.EntityFrameworkCore.Design -Version 7.0.20 Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 7.0.20 # 这个不用安装,Microsoft.EntityFrameworkCore.Design包含 # Install-Package Install-Package Microsoft.EntityFrameworkCore.Tools -Version 7.0.20
- 运行命令生成迁移Add-Migration InitialCreate
- 更新数据库Update-Database
后续
- 这样后续就可以通过添加模型文件->生成迁移->更新数据库的方式进行管理数据库了
    博  主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18868643
 
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
    
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18868643
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号