在实体框架6中添加迁移创建数据库时出错,找不到CoreTypeMappingParameters方法

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

我正在尝试运行添加迁移以在本地计算机上创建数据库,在最后几秒钟我收到此错误:

找不到方法:'Void CoreTypeMappingParameters..ctor(System.Type,Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter,Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer,Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer,System.Func`3)' .

这是我的

Program.cs

我不知道去哪里看,有什么建议吗?

entity-framework asp.net-core
5个回答
27
投票

我根据本文中的视频找到了问题的解决方案

点击这里

解决方案是让所有包的版本与

Palemo.EntityFrameworkCore.MySql = 6.0.1 
相同。

这使它工作并为 Mysql 创建迁移。


5
投票

如果有人遇到同样的错误,在您的解决方案中,如果您有不同的项目,请检查Microsoft Core版本和工具版本是否相同,将它们全部删除重新安装软件包,错误就消失了


0
投票

在我的单个项目ASP.Net core .Net 6.0中,我通过安装Microsoft.EntityFrameworkCore版本6.0.14而不是7.0.3

解决了问题

0
投票

我也遇到了同样的问题,无论版本类型如何,所有的entityframeworkCore包都应该具有相同的。现在我安装了所有最新版本,现在它可以工作了


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.