未找到:'Void CoreTypeMappingParameters..ctor

问题描述 投票:0回答:2

我将项目从 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
entity-framework entity-framework-core hierarchyid ef-core-7.0
2个回答
2
投票

当我从 .net5 更新到 .net6 并更新我的软件包时,也发生了这种情况。

卸载 7.0 版本的 Microsoft.EntityFrameworkCore.Design,然后

在 NuGet 包管理器控制台中,运行

PM> 安装包 Microsoft.EntityFrameworkCore.Design -版本 6.0.10


0
投票

更新到 .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 文件中的版本,我发现这适用于几乎所有数据结构,但如果您找到一个更好的组合,请随时评论

© www.soinside.com 2019 - 2024. All rights reserved.