You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scaffold-DbContext分项目生成DbContext与实体类

分离生成DbContext与实体类到不同项目的解决方案

我太懂手动拆分的麻烦了,其实用Scaffold-DbContext的参数组合就能轻松实现分离,再也不用手动删冗余内容。下面是具体的操作步骤:

1. 先搞定项目依赖

确保你的DbContext项目(比如叫MyApp.Data)已经引用了实体类项目(比如叫MyApp.Entities),这样DbContext才能正常访问实体类。同时两个项目要安装对应的EF Core NuGet包:

  • 实体项目:安装Microsoft.EntityFrameworkCore
  • DbContext项目:安装Microsoft.EntityFrameworkCore.Design和对应数据库的提供者包(比如用SQL Server的话就装Microsoft.EntityFrameworkCore.SqlServer)

2. 生成实体类到实体项目

打开Package Manager Console,切换到DbContext项目(我们从这里执行命令更方便),运行以下命令:

Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "../MyApp.Entities/Models" -Context ""
  • -OutputDir:指定实体类生成到实体项目的目标目录(这里用相对路径,你可以根据自己的项目结构调整)
  • -Context "":空值表示不生成DbContext,只产出实体类

如果后续数据库结构有变更,加-Force参数就能直接覆盖旧的实体类:

Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "../MyApp.Entities/Models" -Context "" -Force

3. 生成DbContext到DbContext项目

同样在Package Manager Console的DbContext项目下,执行这条命令:

Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -ContextDir . -Context "MyAppDbContext" -NoEntities -Namespace "MyApp.Data" -EntityNamespace "MyApp.Entities.Models"

参数解释:

  • -NoEntities:跳过生成实体类,直接复用实体项目里已有的类
  • -ContextDir:指定DbContext生成的目录,.表示当前项目根目录,也可以指定子文件夹比如./Data
  • -Context:设置DbContext的类名
  • -Namespace:定义DbContext所在的命名空间
  • -EntityNamespace:指定实体类的命名空间,这样DbContext会自动引用该命名空间,不用手动加using

后续更新DbContext时,同样加-Force参数覆盖旧文件就行。

额外小提示

  • 相对路径要根据你的项目层级调整,比如如果两个项目是同级的,用../实体项目名/目录就没问题
  • 如果你习惯用.NET CLI而不是Package Manager Console,命令格式类似,只是参数保持统一短横线:
    dotnet ef dbcontext scaffold "你的连接字符串" Microsoft.EntityFrameworkCore.SqlServer --output-dir ../MyApp.Entities/Models --context ""
    

内容的提问来源于stack exchange,提问作者yasserpulido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:57:34