【问题标题】:AddDbContext not available in IServiceCollection in .NET CoreAddDbContext 在 .NET Core 的 IServiceCollection 中不可用
【发布时间】:2017-12-15 08:58:01
【问题描述】:

我在 Visual Studio 2017 中有 .NET Core 2 项目。我正在尝试添加 (Postgresql) 数据库连接。这是一个代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext(options =>
        options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));

    // Add framework services.
    services.AddMvc();
}

但编译器抱怨此消息:

IServiceCollection 不包含“AddDbContext”的定义 并且没有扩展方法“AddDbContext”接受第一个参数 可以找到类型“IServiceCollection”(您是否缺少使用 指令还是程序集引用?)

我安装了 NuGet 包 Npgsql。我也尝试安装 NuGet 包 EntityFramework,但收到错误:

包还原失败。回滚“MyProject”的包更改。

这是我问题的根源吗?我应该安装其他库吗?

在这个question 过程中使用了 AddEntityFramework() 和 AddEntityFrameworkNpgsql(),但这两个在我的项目中也没有被编译器识别。

【问题讨论】:

  • 代码顶部的实体框架命名空间是否有适当的 using 语句?
  • @calingasan:编译器并未暗示缺少 using 语句。相反,唯一可用的建议是生成类。
  • 嗯,是的,错误信息提示缺少 using 语句。
  • 这似乎是多项目解决方案中可能发生的事情。请记住,如果您的 startup.cs 项目依赖于解决方案中的另一个项目(可能是 EntityFrameworkCore 库所在的位置),您必须先编译依赖项,然后查看它是否正常。任何情况下都需要在主项目startup.cs中加入using语句。

标签: c# .net postgresql .net-core visual-studio-2017


【解决方案1】:

确保您安装了正确版本的相关 NuGet 包,例如

Microsoft.EntityFrameworkCore v3

并且正在使用正确的命名空间,例如

使用 Microsoft.EntityFrameworkCore;

使用 Microsoft.Extensions.DependencyInjection;

【讨论】:

    【解决方案2】:

    我安装了 Npgsql.EntityFrameworkCore.PostgreSQL 并解决了我的问题。我也使用了 Danijel 的建议:

    services.AddDbContext<ClassDbContextName>(options =>
                options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));
    

    【讨论】:

      【解决方案3】:

      如果你的持久层在另一个项目中(Class Library)并且你已经在持久层上安装了一个合适的 NuGet 库,比如Npgsql.EntityFrameworkCore.PostgreSQL,那么build 是必要的,特别是如果你正在使用VS Code .否则可能无法识别services.AddDbContext&lt;T&gt;

      【讨论】:

        【解决方案4】:

        使用 Microsoft.Extensions.DependencyInjection 添加为我解决了这个问题。

        【讨论】:

        • 这应该是评论而不是答案(来自评论)。
        【解决方案5】:

        试试这个

        services.AddDbContext(选项 => options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")))

        【讨论】:

        • tnx 它给出了解决方案
        • 尽量使用正确的拼写、标点和语法。
        【解决方案6】:

        解决方案非常简单,您只需在正确的文件中安装 microsoft.entityframeworkcore nuget 包。然后在安装后,您将可以看到智能帮助选项。

        【讨论】:

          【解决方案7】:

          我在使用 Sqlite 时遇到了这个问题。

          1. 我从 Nuget galary 安装了 Microsoft.EntityFrameworkCore.Sqlite。
          2. 我将包安装在 StartUp.cs 文件所在的文件夹下。
          3. 在 StartUP.cs 中引入了使用 Microsoft.EntityFrameworkCore

          这解决了我的问题。

          【讨论】:

            【解决方案8】:

            对于 ASP.Net 核心,来自命令提示符。

            dotnet 添加包 Npgsql.EntityFrameworkCore.PostgreSQL

            用于安装特定版本, dotnet 添加包 Npgsql.EntityFrameworkCore.PostgreSQL --version 6.0.0

            【讨论】:

              【解决方案9】:

              你可以试试这样吗

              services.AddDbContext<ClassDbContextName>(options =>
                      options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));
              

              【讨论】:

              • 是的。有相同的消息。您可以删除您的答案。
              • 什么是 ClassDbContextName?我还应该为此添加定义吗?
              • ClasssDbContexName 只是类的名称,但它指的是数据库表等。如果您检查此链接,您将看到一个示例。希望对你有用:docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-12-22
              • 2021-07-21
              • 1970-01-01
              • 2018-01-24
              • 1970-01-01
              • 2016-02-22
              • 2019-01-04
              相关资源
              最近更新 更多