【问题标题】:Unable to resolve service for type Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger无法解析 Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger 类型的服务
【发布时间】:2022-01-10 10:43:54
【问题描述】:

我在使用 EF 核心构建现有 MySQL 数据库时遇到了困难。 我已经添加了oracle doc中提到的所需依赖项:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkcore.Tools" Version="6.0.0">

然后,我在包管理器控制台中运行了这段代码:

Scaffold-Dbcontext "server=the.server.ip.address;user=user_name;database=db_name;password=db_password;port=3306" MySql.EntityFrameworkCore -o Data -v

它显示了这个错误:

无法解析服务类型 'Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger`1[Microsoft.EntityFrameworkCore.DbLoggerCategory+Scaffolding]' 在尝试激活时 'MySql.EntityFrameworkCore.Scaffolding.Internal.MySQLDatabaseModelFactory'

以下是输出窗口中的相关日志:

Finding design-time services referenced by assembly 'Test2'...
Finding design-time services referenced by assembly 'Test2'...
No referenced design-time services were found.
Finding design-time services for provider 'MySql.EntityFrameworkCore'...
Using design-time services from provider 'MySql.EntityFrameworkCore'.
Finding IDesignTimeServices implementations in assembly 'Test2'...
No design-time services were found.

我不知道如何实现设计时类,也没有在网络上找到任何有用的链接。

请注意,我可以使用 MySQL Workbench 访问和运行数据库查询。

【问题讨论】:

    标签: mysql entity-framework-core


    【解决方案1】:

    我在尝试构建现有 MySQL 数据库时遇到了同样的问题。看起来最新版本的 MySql.EntityFrameworkCore (6.0.0-preview3.1) 仍然使用 EFCore 5.0 库并且尚未更新到 EFCore 6.0。

    似乎Microsoft.EntityFrameworkCore.Diagnostics 最后一次在 EFCore 5 中实现并在 6 中删除。

    当我将所有包降级到 5 版本级别时,我能够运行脚手架命令而不会出现该错误。

    【讨论】:

    • 你是如何降级的?添加了指定较低版本的软件包?
    【解决方案2】:

    为了使Scaffold-Dbcontext 工作,我不得不将两个包都降级到5.0.0 版本。

    • MySql.EntityFrameworkCore
    • Microsoft.EntityFrameworkCore.Tools

    成功搭建脚手架后,我将这些软件包升级回最新版本。

    【讨论】:

      【解决方案3】:

      @https://stackoverflow.com/users/1322226/quinestor 我遇到了同样的问题,正如@https://stackoverflow.com/users/9914700/james-ruth 提到的,我降级了所有 EFCore 和 EFCore Design 的版本到 Visual Studio 中的 5.0.8。

      没有四处寻找命令行命令 :) 但我们也可以从 dotnet cli 执行此操作,我想您可能会知道。我们可以删除 - dotnet remove package ,并安装特定版本 - dotnet add package --version

      【讨论】:

        【解决方案4】:

        我可以在官方网站上找到microsoft.entityframeworkcore.diagnostics 的Core 6.0 文档,但是当我尝试使用 Scaffold-DbContext 命令时它仍然无法正常工作。必须将所有软件包降级到最新的 5.0 版本才能正常工作。这是我的项目设置中的 packagerefs

        "Microsoft.EntityFrameworkCore.Design" 版本="5.0.13"

        “Microsoft.EntityFrameworkCore.Tools”版本="5.0.13"

        "MySql.Data" 版本="8.0.28"

        "MySql.EntityFrameworkCore" 版本="5.0.10"

        【讨论】:

          【解决方案5】:

          我不是在搭建脚手架时遇到此错误,而是在尝试创建我的第一次迁移时遇到此错误。我不想降级到 5.0,因为它必须是永久性的,因为我要运行大量迁移。

          我通过将我的提供商从 MySql.Data.EntityFrameworkCore 更改为 Pomelo.EntityFrameworkCore.MySql 来修复它

          1. 从我的 API 和 DAL 项目中删除旧提供程序:

            dotnet remove package MySql.EntityFrameworkCore

          2. 添加 Pomelo 提供者

            dotnet add package Pomelo.EntityFrameworkCore.MySql

          3. 更新您的启动以使用 Pomelos 配置:

            https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql#2-services-configuration

          4. 正在迁移:

            dotnet ef migrations add InitialCreate

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-08-16
            • 2020-03-13
            • 2019-02-10
            • 2019-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多