我正在尝试运行添加迁移以在本地计算机上创建数据库,在最后几秒钟我收到此错误:
找不到方法:'Void CoreTypeMappingParameters..ctor(System.Type,Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter,Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer,Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer,System.Func`3
)' .
这是我的
Program.cs
:
我不知道去哪里看,有什么建议吗?
我根据本文中的视频找到了问题的解决方案
解决方案是让所有包的版本与
Palemo.EntityFrameworkCore.MySql = 6.0.1
相同。
这使它工作并为 Mysql 创建迁移。
如果有人遇到同样的错误,在您的解决方案中,如果您有不同的项目,请检查Microsoft Core版本和工具版本是否相同,将它们全部删除重新安装软件包,错误就消失了
在我的单个项目ASP.Net core .Net 6.0中,我通过安装Microsoft.EntityFrameworkCore版本6.0.14而不是7.0.3
解决了问题我也遇到了同样的问题,无论版本类型如何,所有的entityframeworkCore包都应该具有相同的。现在我安装了所有最新版本,现在它可以工作了
更新到 .net v8 后遇到此问题。我有一个 dll,它只是从 MySQL 数据库搭建而成,其项目文件 (.csproj) 为
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<!-- <EnablePreviewFeatures>true</EnablePreviewFeatures> -->
<GenerateRequiresPreviewFeaturesAttribute>False</GenerateRequiresPreviewFeaturesAttribute>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.10">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="MySql.EntityFrameworkCore" Version="7.0.10" />
<PackageReference Include="MySql.Data" Version="8.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
对于本示例,上述内容保存在文件 ProjectName.csproj 中,并在名为 ProjectName.csproj.build 的文件中保存一份副本
我创建了一个新的项目文件来执行脚手架
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="MySql.EntityFrameworkCore" Version="5.0.16" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
该文件保存为 ProjectName.csproj.scaffold
然后使用以下脚本重新搭建脚手架
del ProjectName.csproj
cp ./ProjectName.csproj.scaffold ./ProjectName.csproj
rm ContextObjectsFolder
dotnet ef dbcontext scaffold "Server=localhost;Database=DBName;User Id=DBUser;Password=DBPassword;" MySql.EntityFrameworkCore -o ContextObjectsFolder --no-pluralize -f --no-onconfiguring --context ContextObjectName
del ProjectName.csproj
cp ./ProjectName.csproj.build ./ProjectName.csproj
将 DBName 替换为您的数据库名称
将 DBUser 替换为您的 MySQL 用户名
将 DBPassword 替换为您的 MySQL 密码
将 ContextObjectsFolder 替换为您想要 EF 对象的文件夹
将 ContextObjectName 替换为您要使用的数据库上下文名称
您需要进行一些清理来解决警告,但您应该能够在您的应用程序中使用它。
将以下引用添加到引用 DLL 的应用程序中
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
现在您应该可以在 .Net 8 应用程序中使用 MySQL EF 了。
您可以使用 .scaffold 文件中的版本,我发现这适用于几乎所有数据结构,但如果您找到一个更好的组合,请随时评论