Visual Studio for Mac下.NET Core Web API EF脚手架MySQL报错求助
解决.NET Core 2.0 + MySQL EF Core脚手架生成时的类型加载错误
这个错误的核心原因是你的MySQL EF Core Provider版本和项目依赖的EF Core版本不兼容,具体来说:
- 你的项目基于.NET Core 2.0,通过
Microsoft.AspNetCore.All2.0.0引入的EF Core版本是2.0.0 - 但你使用的
MySql.Data.EntityFrameworkCore8.0.9-dmr是为EF Core 2.1及以上版本设计的,两者API结构不匹配,导致找不到DesignTimeProviderServicesAttribute这个类型(该类型在EF Core 2.0的体系中不存在,是后续版本新增/调整的)
修复步骤:
替换兼容的MySQL EF Core包版本
对于.NET Core 2.0,你需要使用专门适配的MySQL EF Core Provider版本——6.10.8。修改你的csproj文件,将MySQL相关包的版本替换成如下内容:<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="MySql.Data.EntityFrameworkCore" Version="6.10.8" /> <PackageReference Include="MySql.Data.EntityFrameworkCore.Design" Version="6.10.8" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" /> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> </ItemGroup> </Project>清理并恢复NuGet依赖
在项目根目录执行以下命令,确保旧的不兼容包被清理,新的依赖被正确下载:dotnet clean dotnet restore重新执行脚手架命令
再次运行你原来的dotnet ef dbcontext scaffold命令即可,版本匹配后Provider能正确找到对应的EF Core类型:dotnet ef dbcontext scaffold "server=[server];port=3306;user=[user];password=[password];database=[dbname]" MySql.Data.EntityFrameworkCore -o Models -c [contextname] -f -v
补充说明:
你看到网上有人用类似配置成功,是因为他们的项目大概率是基于.NET Core 2.1或更高版本——这些版本的EF Core和8.x系列的MySQL Provider是兼容的。如果你的项目没有必须停留在2.0的限制,也可以考虑将项目升级到.NET Core 2.1+,这样就能使用更新的MySQL Provider版本,获得更好的兼容性和功能。
内容的提问来源于stack exchange,提问作者Ori.Lin
相关产品推荐
相关产品推荐

