实体框架核心:DbContextOptionsBuilder不包含"usesqlserver"的定义,也没有"usesqlserver"的扩展方法。

369

我对EF Core不熟悉,正尝试将其与我的ASP.NET Core项目配合使用。

在我的startup.cs文件中,当尝试配置DbContext以使用来自配置的连接字符串时,出现了上述错误。我正在遵循此教程

有问题的代码在startup.cs中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using tracV2.models;
using tracV2.data;

namespace tracV2
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            services.AddSingleton<IConfiguration>(Configuration);

            string conn = Configuration.GetConnectionString("optimumDB");

            services.AddDbContext<tracContext>(options => options.usesqlserver(conn));
        }

如果我直接将UseSqlServer方法放入上下文中,则可以识别它:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace tracV2.data
{
    public class tracContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("myrealconnectionstring");
        }

我所有在网上查到的研究都指向缺失引用,但是我似乎找不到我缺失的是哪一个(请看图片)。


同样的问题,智能感知也找不到这个方法。 - Maxime Laflamme
这是项目系统中已知的问题。请参见dotnet/project-system#1741 - bricelam
36个回答

790

首先,我们安装 Microsoft.EntityFrameworkCore.SqlServer NuGet 包:

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

然后,使用以下代码导入名称空间

using Microsoft.EntityFrameworkCore;
我们添加数据库上下文:
services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));

4
谢谢您的回答,但我已经这样做了。我开始怀疑我的原始项目中有一些文件损坏。我会尝试从新项目中看是否可以复制出问题... - Maxime Laflamme
28
应将此答案标记为正确答案,而不是其他答案。原因是使用UseSqlServer方法是来自此包而非其他包。 - H35am
这对我不起作用。我有NuGet包:Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools和在顶部使用了“using Microsoft.EntityFrameworkCore;”,但仍然出现错误。 - Paul
你还需要这个构造函数 public AspDbContext(DbContextOptions<AspDbContext> options) : base(options) { } - Andriy Tolstoy
1
对于未来遇到这个问题的用户而言,NuGet包的版本很重要。当我使用.NET Core版本为5.0.0时,Microsoft.EntityFrameworkCore.SqlServer 6.0.1 对我来说无法解决问题。我必须安装一个更低版本的NuGet包才能解决红线错误。 - Arpit Chinmay
在我的情况下,虽然我已经安装了以下包Microsoft.EntityFrameworkCore.SqlServer.Design``` 但是.dotnet ef工具并没有被安装 ```dotnet tool install dotnet-ef``` 在安装、卸载和重新安装Microsoft.EntityFrameworkCore.SqlServer之后,问题得到了解决 - undefined

142

添加 using Microsoft.EntityFrameworkCore; 手动为我解决了这个问题。

在这里找到了解决方法

编辑...

对于dotnet core 3.1,添加 Microsoft.EntityFrameworkCore.SqlServer


7
这是答案。 - smulholland2
修好了!不知怎么回事,它没有出现在建议列表中 ctrl+. - Ron Splinter
2019年,他用 .Net Core 2.2 为我修复了这个问题。 - lucamuh
4
是的,但我发现在dotnetcore 3.1中需要Microsoft.EntityFrameworkCore.SqlServer包。在此之前,貌似只需要Microsoft.EntityFrameworkCore就够了。 - Jeremy Ray Brown

43

请按照以下步骤操作。

安装 Entity Framework Core 设计和 SQL Server 数据库提供程序以供 Entity Framework Core 使用:

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

导入Entity Framework Core:

using Microsoft.EntityFrameworkCore;

并配置您的 DbContext:

var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options => 
    options.UseSqlServer(connectionString)
);

2
这个解决方案中手动添加“using”语句的部分对我有效 - 似乎我的编辑器没有检测到程序集中的软件包。 - Kyle L.
1
对我有用,你确实需要手动添加using语句,因为IDE不会提供提示。 - Yogi

39

安装下面的 NuGet 包将解决您的问题

Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.SqlServer


1
关于这个一行命令如何解决问题,需要更详细的说明。具体来说,您需要解释该软件包的工作原理,因为这里涉及到了一个软件包。 - Parth Pandya
"DbContextOptionsBuilder.UseSqlServer" 可在 Microsoft.EntityFrameworkCore.SqlServer 包中找到,因此需要添加对它的引用以解决构建问题。 - Phani K

24

安装 Microsoft.EntityFrameworkCore.SqlServer 解决了我的问题。 - kofifus

11

我相信通过向 Microsoft.EntityFrameworkCore.SqlServer.Design 添加项目引用可以解决这个问题。

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

在我的项目中没有直接安装Microsoft.EntityFrameworkCore.SqlServer,但.Design包将其作为先决条件安装。


安装不必要的包作为传递依赖项来引入所需项目并不能解决问题。 - Smit
你认为这个包是不必要的,但当我遇到完全相同的问题时,它却修复了我的项目。 - Andrew S
那个包在当前问题中是不必要的。它可能对其他问题有用,但不适用于这个问题。 - Smit
截至今天,7月27日,您只需安装Microsoft.EntityFrameworkCore.SqlServer包即可解决该问题。 - danfer
3
截至今天,即2018年2月5日,您仍需添加 Microsoft.EntityFrameworkCore.SqlServer.Design 包。这是在使用 ASP.NET Core 2.0.1 Web 项目时观察到的。 - Rus
通过这个解决方案解决了我的问题,谢谢! - Ghanshyam Lakhani

10

你的解决方案非常好。

当我观看这段视频到第17分钟时:https://www.youtube.com/watch?v=fom80TujpYQ 我在这里遇到了一个问题:

 services.AddDbContext<PaymentDetailContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));

UseSqlServer未被识别,因此我这样做: Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.5

& using Microsoft.EntityFrameworkCore;

然后我的问题解决了。关于我:从一开始就是纯PHP程序员,今天才开始进行.net编程,感谢.net社区提供的帮助。


10

软件包丢失。打开“程序包管理器控制台”并执行以下代码:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

8

请从Nuget安装以下软件包:

  1. Microsoft.EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore.Sqlite.Core

这些软件包涉及IT技术。请确保按照格式要求安装它们。

7

项目 -> 管理 Nuget 包 -> 浏览 -> 搜索 "Microsoft.EntityFrameworkCore.SqlServer" 并安装或更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接