.NET Core 3.1添加EF迁移时Pomelo.MySql组件报错求助
解决Pomelo EF Core与EF Core版本不兼容导致的Create方法未实现错误
这个TypeLoadException问题的根源很明确——你项目里的EF Core版本和Pomelo.EntityFrameworkCore.MySql版本完全不匹配。
看一下你的依赖配置:你用了EF Core 5.0的预览版(5.0.0-rc.2.20475.6),但Pomelo的版本是3.2.3,这个版本只适配EF Core 3.x系列。两者的内部API接口已经发生了变化,所以才会出现MySqlSqlTranslatingExpressionVisitorFactory的Create方法找不到实现的错误。另外你还引用了早就过时的Pomelo.EntityFrameworkCore.MySql.Design包,这个包在Pomelo 3.x之后已经被整合到主包,不需要单独引用了。
下面是具体的解决步骤:
1. 统一EF Core和Pomelo的版本
你有两个可选方案,推荐选方案A,因为你的项目目标框架是netcoreapp3.1,搭配稳定版的EF Core 3.1.x更可靠:
方案A:降级EF Core到3.1.x稳定版(和Pomelo 3.2.3匹配)
修改你的项目.csproj文件,调整依赖如下:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.30" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.30"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.3" /> <!-- 移除这个过时的Design包 --> <!-- <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" /> --> </ItemGroup> </Project>
方案B:升级Pomelo到兼容EF Core 5.x的版本
如果你坚持要用EF Core 5.x,确保Pomelo版本也升级到5.x系列(比如5.0.3),修改后的依赖如下:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.17" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.17"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.3" /> </ItemGroup> </Project>
2. 清理并重建项目
在命令行执行以下命令,清理旧的编译文件并重新还原依赖:
dotnet clean dotnet restore
3. 重新执行迁移命令
现在再运行你的迁移命令,应该就能正常执行了:
dotnet ef migrations add InitialMigration
额外提醒
- 记住Pomelo和EF Core的版本必须严格对应:EF Core 3.x ↔ Pomelo 3.x,EF Core 5.x ↔ Pomelo 5.x,大版本号一定要一致。
- 不要在Pomelo 3.x及以上版本中单独引用
Pomelo.EntityFrameworkCore.MySql.Design,否则会引发不必要的版本冲突。
内容的提问来源于stack exchange,提问作者ishan avishka
相关产品推荐
相关产品推荐

