我将项目从 ef 6 更新到 7 并收到此错误
not found: 'Void CoreTypeMappingParameters..ctor(System.Type, Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter, Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer, Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer, System.Func`3<Microsoft.EntityFrameworkCore.Metadata.IProperty,Microsoft.EntityFrameworkCore.Metadata.IEntityType,Microsoft.EntityFrameworkCore.ValueGeneration.ValueGenerator>)'.
Source=EntityFrameworkCore.SqlServer.HierarchyId
当我从 .net5 更新到 .net6 并更新我的软件包时,也发生了这种情况。
卸载 7.0 版本的 Microsoft.EntityFrameworkCore.Design,然后
在 NuGet 包管理器控制台中,运行
PM> 安装包 Microsoft.EntityFrameworkCore.Design -版本 6.0.10
更新到 .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 文件中的版本,我发现这适用于几乎所有数据结构,但如果您找到一个更好的组合,请随时评论