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

时间:2017-03-29 15:37:32

标签: asp.net-core entity-framework-core

我是EF核心的新手,我正试图让它与我的asp.net核心项目一起工作。

在尝试配合dbcontext以使用config中的连接字符串时,我在startup.cs中收到了上述错误。我正在学习本教程:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

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"); } 方法:

<script type="text/javascript">
            function move() {
                document.getElementById("headerTop").style.cursor = "wait";
                function frame() {
                    var elem = document.getElementById("myElement");
                    var width = 0;
                    var id = setInterval(frame, 1000);
                    if (width >= 99) {
                        var number = random(99, 100)
                        if(number = 99) {
                            clearInterval(id);
                            document.getElementById("myElement").className =
                            document.getElementById("myElement").className.replace
                            ( /(?:^|\s)bg-info(?!\S)/g , 'bg-danger' )
                            document.getElementById("header").title = "Oops looks like something has gone wrong reload the page to start over";
                        }else if (number = 100) {
                            clearInterval(id);
                            document.getElementById("myElement").className =
                            document.getElementById("myElement").className.replace
                            ( /(?:^|\s)bg-info(?!\S)/g , 'bg-success' )
                            document.getElementById("header").title = "download is ready";
                        }
                    } else {
                        width++;
                        elem.style.width = width + '%';
                        elem.innerHTML = width * 1 + '%';
                    }
                }
            }
    </script>

我所有的在线研究都指向缺少参考文献,但我似乎无法找出我缺少的那个(见图)。references

非常感谢任何帮助,

由于

34 个答案:

答案 0 :(得分:110)

我们安装了Microsoft.EntityFrameworkCore.SqlServer NuGet包。

Microsoft.EntityFrameworkCore.SqlServer

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

然后,

   services.AddDbContext<AspDbContext>(options =>
       options.UseSqlServer(config.GetConnectionString("optimumDB")));

答案 1 :(得分:49)

添加 using Microsoft.EntityFrameworkCore;

为我手动解决了问题

Found that here

答案 2 :(得分:16)

在NuGet软件包下方安装将解决您的问题

Microsoft.EntityFrameworkCore.SqlServer

  

安装软件包Microsoft.EntityFrameworkCore.SqlServer

答案 3 :(得分:7)

这是项目系统中的已知问题。见dotnet/project-system#1741

答案 4 :(得分:6)

我使用的是Visual Studio Code。

1)尝试安装软件包&#39; Microsoft.EntityFrameworkCore.SqlServer&#39;通过指定版本号。

VS代码

&#39; dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1&#39;

Visual Studio: -

&#39;安装包Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1&#39;

请参阅链接&#39; Package 'Microsoft.EntityFrameworkCore.SqlServer' is incompatible with 'all' frameworks in the project&#39;这样做。

2)然后使用Microsoft.EntityFrameworkCore添加命名空间&#39; ; &#39;在Startup.cs文件中手动。

请参阅以下链接 https://github.com/aspnet/EntityFramework/issues/7891

3)如果您对&#39; Microsoft.EntityFrameworkCore.SqlServer.Design&#39; 有任何依赖性问题,例如&#34;包&#39; Microsoft.EntityFrameworkCore 。设计&#39;与所有&#39;不相容项目中的框架&#34; ,我们需要运行以下命令,

VS代码: -

dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Install-Package Microsoft.EntityFrameworkCore.Design -v 1.1

答案 5 :(得分:5)

项目-> ManageNugetPackages->浏览->搜索“ Microsoft.EntityFrameworkCore.SqlServer”并安装或更新。

答案 6 :(得分:4)

在Visual Studio中,检查 NuGet软件包管理器=>管理解决方案的软件包 ,检查所有这些软件包,是否已在您的计算机中安装了解决方案,如下所示:

  1. EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.InMemory
  4. Microsoft.EntityFrameworkCore.Relational
  5. Microsoft.EntityFrameworkCore.Sqlite.Core
  6. Microsoft.EntityFrameworkCore.SqlServer
  7. Microsoft.EntityFrameworkCore.Tools

在检查所有上述软件包之后,我解决了相同的问题。

答案 7 :(得分:3)

请遵循以下步骤。

为实体框架核心安装实体框架核心设计和SQL Server数据库提供程序:

[HttpPost]
public ActionResult InformeSolicitantes()
{
     return RedirectToAction("Expedientes", "Create");
}

导入实体框架核心:

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

并配置您的DbContext:

using Microsoft.EntityFrameworkCore;

答案 8 :(得分:3)

我也有同样的问题。我添加了以下内容。它对我有用

Microsoft.EntityFrameworkCore.SqlServer

答案 9 :(得分:3)

安装程序包EntityFrameworkCore.SqlServer:

home-component.html

Nuget: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer/

答案 10 :(得分:3)

正如Win得分最高的答案所述,您可能需要安装Microsoft.EntityFrameworkCore.SqlServer NuGet软件包,但请注意,此问题使用的是asp.net核心mvc。在最新的ASP.NET Core 2.1中,MS包含了称为Microsoft.AspNetCore.App

的元包。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage-app?view=aspnetcore-2.2

如果在解决方案资源管理器中右键单击ASP.NET Core MVC项目,然后选择Edit Project File

,则可以看到对其的引用。

如果ASP.NET core webapps使用using语句,则应该看到此元包

<PackageReference Include="Microsoft.AspNetCore.App" />

Microsoft.EntityFrameworkCore.SqlServer包含在此元包中。因此,在您的Startup.cs中,您可能只需要添加:

using Microsoft.EntityFrameworkCore;

答案 11 :(得分:2)

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

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer并没有直接安装在我的项目中,但.Design软件包无论如何都会安装它作为先决条件。

答案 12 :(得分:2)

您的解决方案效果很好。

当我观看此视频直到17分钟:https://www.youtube.com/watch?v=fom80TujpYQ 我在这里遇到问题:

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

UseSqlServer无法识别,所以我这样做了 安装软件包Microsoft.EntityFrameworkCore.SqlServer-版本3.1.5

& 使用Microsoft.EntityFrameworkCore;

然后我的问题解决了。关于我:从一开始我基本上就是一个纯粹的PHP程序员,而今天只有我开始.net编码,感谢.net的良好社区。

答案 13 :(得分:2)

对我来说,此问题发生在Visual Studio Code中,我可以通过两个步骤来解决:

  1. 手动添加using Microsoft.EntityFrameworkCore;
  2. 在终端中运行dotnet build

答案 14 :(得分:2)

首先添加Install-Package Microsoft.EntityFrameworkCore.SqlServer

接下来在您的.cs文件using Microsoft.EntityFrameworkCore;

中添加

最终将其添加到您的核心Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
        }

答案 15 :(得分:1)

我将 SqlServerSqlite 添加到我的项目中,出现了同样的问题。

对我来说,我之前安装了 Microsoft.EntityFrameworkCore,它的版本是 5.0.6。现在 Microsoft.EntityFrameworkCore.SqlServer 版本是 5.0.7。安装后没有UserSqlServer方法。

1.尽量升级工具版本一致

尝试修改csproj中的版本:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.7">

或者打开 NuGet 来更新包。

2.重启你的 Visual Studio

如果没有帮助,最重要的是重启VS

然后,一切正常。

参考 https://github.com/dotnet/efcore/issues/7891

答案 16 :(得分:1)

解决此问题的简便方法

错误消息:
enter image description here

解决方案:
使用NuGet安装“ microsoft.entityframeworkcore.sqlserver”
enter image description here

已修复:
enter image description here

PS:确保在“使用Microsoft.EntityFrameworkCore;”内容上使用EF。 enter image description here

答案 17 :(得分:1)

对于仍然有此问题的任何人: 使用NuGet进行安装: Microsoft.EntityFrameworkCore.Proxies

此问题与将Castle Proxy与EFCore一起使用有关。

答案 18 :(得分:1)

缺少包裹。打开Package Manager控制台并执行以下代码:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

答案 19 :(得分:1)

  

如果您在使用Sqlite时遇到此问题,则

。 我认为这是Sqlite版本的问题,当我使用此版本的SqLite

时也遇到了同样的问题

版本2.2.4

enter image description here

检查版本here enter image description here后,我更改了版本,然后开始工作。

enter image description here

使用此按钮后没有错误

版本2.1.2

enter image description here

答案 20 :(得分:0)

我遇到了这个问题,似乎我没有添加所需的NuGet软件包,尽管我认为我已经这样做了,但请务必逐一检查。

答案 21 :(得分:0)

当前正在使用Entity Framework Core 3.1.3。以上解决方案都无法解决我的问题。

但是,在我的项目中安装软件包Microsoft.EntityFrameworkCore.Proxies解决了该问题。现在,在设置DBContext选项时,我可以访问UseLazyLoadingProxies()方法调用。

希望这对某人有帮助。请参阅以下文章:

Lazy Loading in EF Core

答案 22 :(得分:0)

我必须使用

 services.AddEntityFrameworkSqlite().AddDbContext<MovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));

在Startup.cs的ConfigureServices方法中

答案 23 :(得分:0)

当我移至 Microsoft.EntityFrameworkCore.SqlServer v3.0.0和 Microsoft.EntityFrameworkCore.Tools v3.0.0

时,遇到了麻烦

当我在两个库上都改回v2.2.6时,错误消失了。这不是解决方案,而是解决方法,但可以解决问题,直到问题解决为止。

答案 24 :(得分:0)

安装包:

**Microsoft.EntityFrameworkCore.SqlServer**

然后添加课程顶部:

**Microsoft.EntityFrameworkCore;**

对我有用

答案 25 :(得分:0)

我遇到了同样的问题,但是回过头来解决DbContext这类不正确的语法问题(如应该是ExampleDbContextClass: DbContext)后问题就解决了,而我错过了Context Class中的DbContext部分定义您的DbSet。另外,我还验证了需要以下依赖关系才能实现与SqlServer的连接。 <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" /> 为了安全起见,还请确认您安装的版本小于项目的当前版本。例如,如果您的项目正在使用3.1,请不要尝试使用较新的版本,例如3.1.9。我也有这个问题。

答案 26 :(得分:0)

对于asp.net核心版本2.1,请确保添加以下程序包以解决此问题。 (至少使用SQLite可以解决此问题)

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design

此处是使用带有实体框架核心的SQLite的文档的参考。 https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite

答案 27 :(得分:0)

该项目适用于DotNET Core 3.1+或更高版本(将来)

添加此软件包:

  1. NuGet:Microsoft.EntityFrameworkCore.Tools
  2. 项目配置(.csproj):<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.8">

答案 28 :(得分:0)

我简单地解决了这个问题:

SqlServerDbContextOptionsExtensions添加到相关课程中 解决SqlServerDbContextOptionsExtensions

这解决了这个问题,默认情况下必须缺少一些引用。

答案 29 :(得分:0)

从Nuget安装以下软件包:-

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

答案 30 :(得分:0)

我阅读并完成了每个答案中指示的所有内容,我刚刚发现我的问题是我的 DbContext 上缺少构造函数

public Context(DbContextOptions<Context> options) : base(options) { }

我希望这可以帮助任何面临同样问题的人。

答案 31 :(得分:0)

就我而言:- 我已经点击了下面的命令,它已解决。 命令

<块引用>

安装包 Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1

答案 32 :(得分:0)

哇,答案如此之多,却没人提到这个Microsoft.EntityFrameworkCore.InMemory软件包!

添加对此程序包的引用: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />,您应该会很好。

答案 33 :(得分:-1)

我在软件包管理器控制台中安装了这三个文件,并且运行正常。

Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 3.1.4 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.8 Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.8