EF Core 7.0.8/6.0.19下Visual Basic项目scaffold-dbcontext报错求助
问题场景
在Visual Basic 2022项目中执行Scaffold-DbContext命令时,触发以下错误:
内置服务IModelCodeGenerator不支持项目语言'VB'。您可以尝试寻找支持该语言的额外NuGet包;将DbContext类型移至该项目引用的C#类库中,或手动实现并注册该编程语言的设计时服务。
已尝试使用EF Core 7.0.8版本,以及6.0.19版本的Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools包,但问题未解决。
可行解决方案
1. 安装VB专属的EF Core代码生成包
EF Core从5.x版本开始,Visual Basic的代码生成支持需要单独安装Microsoft.EntityFrameworkCore.VisualBasic包,且必须保证该包与其他EF Core相关包的版本完全一致。
- 使用Package Manager Console安装(对应6.0.19版本):
Install-Package Microsoft.EntityFrameworkCore.VisualBasic -Version 6.0.19 - 使用.NET CLI安装:
dotnet add package Microsoft.EntityFrameworkCore.VisualBasic --version 6.0.19
安装完成后重新执行Scaffold-DbContext命令即可。
2. 强制统一所有EF Core包版本
检查项目中所有EF Core相关包的版本,确保Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools、Microsoft.EntityFrameworkCore.VisualBasic的版本号完全相同,混合不同版本会引发兼容性问题。
3. 改用C#类库中转方案(若上述方法无效)
如果VB专属包仍无法解决问题,可通过C#类库生成代码后在VB项目中引用:
- 新建一个.NET类库(C#)项目;
- 在该类库中安装对应版本的EF Core包(包括
Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools); - 在类库项目中执行
Scaffold-DbContext命令,生成DbContext和实体类; - 在你的VB项目中添加对该C#类库的引用,直接使用生成的上下文和实体类。
内容的提问来源于stack exchange,提问作者user1806273

