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

Entity Framework Core:向类库自动生成数据库脚手架的问题

解决用dotnet cli添加DotNetCliToolReference的问题

针对你自动化EF Core脚手架的场景,我有两种直接的方法可以用dotnet cli给临时项目的.csproj添加DotNetCliToolReference,完全适配脚本自动化的需求:

方法1:用dotnet add package的--tool参数(推荐)

这是最简洁且官方支持的方式,dotnet cli会自动帮你在.csproj里生成正确的DotNetCliToolReference节点。以EF Core工具包为例,命令如下:

# 进入临时项目目录后执行
dotnet add package Microsoft.EntityFrameworkCore.Tools --tool

如果需要固定版本(强烈推荐,避免数据库模型生成时的版本漂移问题),可以加上--version参数:

dotnet add package Microsoft.EntityFrameworkCore.Tools --tool --version 7.0.14

执行完这个命令后,你的临时项目.csproj里会自动多出类似这样的节点:

<ItemGroup>
  <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.14" />
</ItemGroup>

方法2:手动编辑.csproj文件(适合特殊场景)

如果你的dotnet cli版本不支持--tool参数(比如较旧的.NET Core 2.x版本),可以用命令行文本操作工具直接往.csproj里插入节点。

PowerShell环境:

Add-Content -Path ./TempEFScaffoldProject/TempEFScaffoldProject.csproj -Value @"
<ItemGroup>
  <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.14" />
</ItemGroup>
"@

Bash环境:

cat >> ./TempEFScaffoldProject/TempEFScaffoldProject.csproj << EOL
<ItemGroup>
  <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.14" />
</ItemGroup>
EOL

适配你的自动化脚本完整示例

结合你的需求,这里给一个完整的自动化脚本片段(以Bash为例):

# 1. 创建临时控制台项目
dotnet new console -n TempEFScaffoldProject
cd TempEFScaffoldProject

# 2. 添加EF工具和数据库驱动依赖
dotnet add package Microsoft.EntityFrameworkCore.Tools --tool --version 7.0.14
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 7.0.14

# 3. 生成上下文和模型类(替换成你的数据库连接字符串)
dotnet ef dbcontext scaffold "Server=YOUR_SERVER;Database=YOUR_DB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models --context-dir Contexts

# 4. 迁移生成的文件到共享项目(替换成你的共享项目路径)
cp -r Models/* ../SharedModelProject/
cp -r Contexts/* ../SharedModelProject/

# 5. 清理临时项目
cd ..
rm -rf TempEFScaffoldProject

额外注意事项

  • 从.NET Core 3.0开始,官方推荐使用Local Tools替代DotNetCliToolReference,如果你的环境是.NET 5+,也可以用dotnet tool install Microsoft.EntityFrameworkCore.Tools --local来安装本地工具,效果是一样的,只是依赖会存在.config/dotnet-tools.json里,适合临时项目的场景。
  • 因为数据库工程师频繁更新模型,建议在脚本中固定所有EF相关包的版本,避免不同版本生成的模型代码不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:30