C# 控制台使用 SQL Server ,使用 EF 反向工程实践 Database First / Code First

参考

环境

软件/系统 版本 说明
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 服务器

其他

  1. 如果要使用 dotnet-ef 相关命令,需要先安装 dotnet-ef 命令
    # 1. 查看所有已安装工具 
    dotnet tool list -g
    # 2. 安装生成工具
    dotnet tool install -g dotnet-ef
    
  2. 在 ASP .NET Core 中,需要将数据库对象托管给应用管理、实例化,就可以在控制器中自动注入并使用了。

正文

Database First

首次迁移使用不需要关注6、7、9步骤,6、7、9步骤是为了演示后续新增新的模型/数据表的操作。

步骤
  1. 在数据库中创建数据库:School_2025_Xiaqiuchu,数据表: StudentsClassRoomsTeachersCoursesClassRoom_Course_Teacher
  2. 创建控制台程序,基于 .NET 6 ,不使用顶级语句。
  3. 程序包管理控制台运行以下命令,安装项目依赖
    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 
    
  4. 程序包管理控制台运行以下命令为指定的数据库生成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
    
生成迁移
  1. 将已有数据库生成迁移,并设置迁移名称(名称为自定义,不一定是 InitialCreate)。
    Add-Migration InitialCreate
    
追加数据表 (Model To Database)
  1. 新增对应的表模型文件 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; }
    
  2. 创建迁移,并指定迁移名称
    Add-Migration AddBook
    
迁移
  1. 通过 Get-Migration 命令,可以查看迁移列表与状态。
    PM> Get-Migration
    Build started...
    Build succeeded.
    
    id                           name          safeName      applied
    --                           ----          --------      -------
    20250509101113_InitialCreate InitialCreate InitialCreate   False
    20250509101124_AddBook       AddBook       AddBook         False
    
    
  2. 删除已有数据库(注意:此处暂未找到更好的解决办法,不删除数据库,直接运行 Update-Database 会出现数据表已存在的问题;正式项目请参考手动或通过创建数据库更改脚本进行此更改
    # Drop-Database
    
  3. 更新数据库
    Update-Database
    

后续

  1. 这样后续就可以通过添加模型文件->生成迁移->更新数据库的方式进行管理数据库了

Code First

  1. 参考 https://www.cnblogs.com/xiaqiuchu/p/18867682 文章的代码部分,将相关模型文件、Content 类准备好。
  2. 程序包管理控制台运行以下命令,安装项目依赖
    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 
    
  3. 运行命令生成迁移
    Add-Migration InitialCreate
    
  4. 更新数据库
    Update-Database
    
后续
  1. 这样后续就可以通过添加模型文件->生成迁移->更新数据库的方式进行管理数据库了
posted @ 2025-05-09 19:21  夏秋初  阅读(47)  评论(0)    收藏  举报