Núcleo da estrutura da entidade: DbContextOptionsBuilder não contém uma definição para 'usesqlserver' e nenhum método de extensão 'usesqlserver'


150

Eu sou novo no EF core e estou tentando fazê-lo funcionar com meu projeto ASP.NET Core.

Eu recebo o erro acima no meu startup.csao tentar configurar o DbContextpara usar uma seqüência de conexão de configuração. Estou seguindo este tutorial: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

O código problemático em 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));
        }

O UseSqlServermétodo é reconhecido se eu o colocar diretamente no contexto:

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

Toda a minha pesquisa on-line aponta para referências ausentes, mas não consigo descobrir qual delas está faltando ( veja a imagem ).


A mesma coisa, o intellissense também não encontra o método.
Maxime Laflamme 30/03

Respostas:



352

Primeiro, instalamos o pacote NuGet Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Depois de importar o espaço para nome com

using Microsoft.EntityFrameworkCore;

nós adicionamos o contexto do banco de dados:

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

3
Obrigado pela resposta, mas eu já fiz isso. Estou começando a suspeitar que algo está corrompido no meu projeto original. Vou tentar ver se consigo reproduzir a partir de um novo projeto ...
Maxime Laflamme 29/03

10
Esta resposta deve ser marcada como resposta correta, não as outras, o motivo é que o método UseSqlServer é deste pacote e não dos outros pacotes.
H35am

107

adicionando using Microsoft.EntityFrameworkCore;

manualmente resolveu o problema para mim

Descobri que aqui

Editar...

para dotnet core 3.1 add

Microsoft.EntityFrameworkCore.SqlServer


5
Essa é a resposta.
precisa saber é o seguinte

Corrigido para mim! De alguma forma, não estava na lista de sugestões ctrl +.
Ron Splinter

Fixa-lo para mim em 2019 com .Net Núcleo 2.2
lucamuh

1
Sim, mas descobri que o pacote Microsoft.EntityFrameworkCore.SqlServer era necessário para o dotnetcore 3.1. Antes disso, parecia que apenas o Microsoft.EntityFrameworkCore era suficiente.
Jeremy Ray Brown

31

Instalar abaixo do Pacote NuGet resolverá seu problema

Microsoft.EntityFrameworkCore.SqlServer

Pacote de instalação Microsoft.EntityFrameworkCore.SqlServer


1
Adicione um pouco mais de explicação sobre como esse comando de uma linha resolverá o problema da operação. Especificamente, aqui você está endereçando um pacote para explicar como esse pacote funciona.
Parth Pandya

"DbContextOptionsBuilder.UseSqlServer" está disponível no pacote Microsoft.EntityFrameworkCore.SqlServer , portanto, é necessário adicionar a referência para resolver o problema de compilação.
Phani K

9

O pacote está ausente. Abra o Console do Gerenciador de Pacotes e execute o código abaixo:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

9

Siga os passos abaixo.

Instale o provedor de banco de dados do Entity Framework Core Design e do SQL Server para o Entity Framework Core:

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

Importar estrutura da entidade principal:

using Microsoft.EntityFrameworkCore;

E configure seu DbContext:

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

7

Eu estava usando o Visual Studio Code.

1) Tente instalar o pacote 'Microsoft.EntityFrameworkCore.SqlServer' especificando o número da versão.

Código VS :

'dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Estúdio visual:-

'Pacote de instalação Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Consulte o link ' Package' Microsoft.EntityFrameworkCore.SqlServer 'é incompatível com as estruturas' all 'no projeto ' para fazer isso.

2) Em seguida, adicione o espaço para nome ' usando Microsoft.EntityFrameworkCore; 'manualmente no arquivo Startup.cs.

Consulte o link abaixo https://github.com/aspnet/EntityFramework/issues/7891 .

3) Se você encontrar qualquer problema de dependência do ' Microsoft.EntityFrameworkCore.SqlServer.Design' , como "Pacote ' Microsoft.EntityFrameworkCore.Design' é incompatível com as estruturas 'all' no projeto ", precisamos executar o comando abaixo,

Código VS: -

dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1

Estúdio visual

Pacote de Instalação Microsoft.EntityFrameworkCore.Design -v 1.1


1
Este realmente funciona. Esta é a melhor resposta para a pergunta. Obrigado @Krishna
penderi

6

Projeto -> ManageNugetPackages -> Navegar -> Pesquise "Microsoft.EntityFrameworkCore.SqlServer" e instale ou atualize.


4

Conforme mencionado na resposta de pontuação mais alta do Win, pode ser necessário instalar o Pacote NuGet do Microsoft.EntityFrameworkCore.SqlServer, mas observe que esta pergunta está usando o asp.net core mvc. No mais recente ASP.NET Core 2.1, a MS incluiu o que é chamado de metapacote chamado Microsoft.AspNetCore.App

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

Você pode ver a referência a ele se clicar com o botão direito do mouse no projeto ASP.NET Core MVC no gerenciador de soluções e selecionar Edit Project File

Você deve ver esse metapacote se o núcleo do ASP.NET aplicar a instrução using

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

Microsoft.EntityFrameworkCore.SqlServer está incluído neste metapacote. Portanto, no seu Startup.cs, talvez você precise adicionar apenas:

using Microsoft.EntityFrameworkCore;


3

Acredito que isso possa ser resolvido adicionando uma referência de projeto ao Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

O Microsoft.EntityFrameworkCore.SqlServer não foi instalado diretamente no meu projeto, mas o pacote .Design o instalará de qualquer maneira como pré-requisito.


Instalar o pacote desnecessário que traz o projeto necessário como dependência transitiva não é uma solução para o problema.
Smit

Você supõe que o pacote é desnecessário, mas ele corrigiu meu projeto quando eu tive exatamente o mesmo problema.
Andrew S

Esse pacote é desnecessário para a pergunta atual. Pode ser necessário para um problema diferente, mas não para este.
Smit

A partir de hoje, 27 de julho, você pode instalar o pacote apenas Microsoft.EntityFrameworkCore.SqlServer e ele vai resolver a questão
Danfer

3
Atualmente, em 5 de fevereiro de 2018, você ainda precisa adicionar o pacote Microsoft.EntityFrameworkCore.SqlServer.Design. Isso foi observado usando um projeto da Web ASP.NET Core 2.0.1.
Rus

3

Para mim, esse problema ocorreu com o Visual Studio Code e eu pude corrigir com 2 etapas:

  1. Adicionando manualmente using Microsoft.EntityFrameworkCore;
  2. Correndo dotnet buildno terminal.

3

No Visual Studio, verifique o NuGet Package Manager => Gerenciar pacotes para solução , verifique todos esses pacotes, instalados ou não na sua solução, conforme abaixo:

  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

Resolvi os mesmos problemas depois de verificar se todos os pacotes acima foram instalados.



3

primeiro adicione Install-Package Microsoft.EntityFrameworkCore.SqlServer

próximo adicione no seu arquivo .cs using Microsoft.EntityFrameworkCore;

finalmente adicione isso no seu núcleo Startup.cs

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

2

Se você estiver enfrentando esse problema no caso do Sqlite,

. Eu acho que esse é o problema com a versão do Sqlite, tive o mesmo problema quando estava usando essas versões do SqLite

Versão 2.2.4 :

insira a descrição da imagem aqui

Depois de verificar a versão aqui insira a descrição da imagem aqui , mudei a versão e funcionou.

insira a descrição da imagem aqui

Nenhum erro após usar este

Versão 2.1.2 :

insira a descrição da imagem aqui


1

Eu contornei isso simplesmente:

Adicionar SqlServerDbContextOptionsExtensions à turma em questãoSqlServerDbContextOptionsExtensions

Isso corrige o problema. Deve estar faltando alguma referência por padrão.


1

Para quem ainda está com esse problema: Use o NuGet para instalar: Microsoft.EntityFrameworkCore.Proxies

Esse problema está relacionado ao uso do Castle Proxy com EFCore.


1

Uau, tantas respostas, mas nenhuma mencionou este pacote Microsoft.EntityFrameworkCore.InMemory !

Adicione a referência a este pacote: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />e você deve estar pronto.


1

Tive este problema quando mudei para Microsoft.EntityFrameworkCore.SqlServer v3.0.0 e Microsoft.EntityFrameworkCore.Tools v3.0.0

Quando voltei para a v2.2.6 nas duas bibliotecas, o erro desapareceu. Isso é mais uma solução alternativa do que uma solução, mas o colocará em funcionamento até que o problema seja resolvido.


1

Maneira fácil de corrigir esse problema

Mensagem de erro:
insira a descrição da imagem aqui

Solução:
para instalar "microsoft.entityframeworkcore.sqlserver" com o NuGet
insira a descrição da imagem aqui

Fixed:
insira a descrição da imagem aqui

PS: verifique se você está usando EF no conteúdo "using Microsoft.EntityFrameworkCore;" insira a descrição da imagem aqui


0

Para o asp.net core versão 2.1, adicione o seguinte pacote para corrigir o problema. (Pelo menos, isso corrige o problema usando o SQLite)

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

Aqui está a referência da documentação usando o SQLite com o núcleo da estrutura da entidade. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0

Eu tive esse problema, parece que não havia adicionado os pacotes NuGet necessários, embora tenha pensado em fazê-lo, verifique-os, um por um.


0

Atualmente trabalhando com o Entity Framework Core 3.1.3. Nenhuma das soluções acima corrigiu meu problema.

No entanto, a instalação do pacote Microsoft.EntityFrameworkCore.Proxies no meu projeto corrigiu o problema. Agora eu posso acessar a chamada do método UseLazyLoadingProxies () ao definir minhas opções de DBContext.

Espero que isso ajude alguém. Veja o seguinte artigo:

Carregamento lento no EF Core


0

Pacote de instalação:

**Microsoft.EntityFrameworkCore.SqlServer**

adicione o topo da sua turma:

**Microsoft.EntityFrameworkCore;**

isso funcionou para mim


0

Eu tive que usar a linha

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

no método ConfigureServices em Startup.cs


0

A cópia do código a seguir no TodoApi.csproj em https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi resolveu um problema semelhante para mim.

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

</Project>

Microsoft.AspNetCore.All pode ser excessivo, mas inclui EntityFrameworkCore


-1

Instale o pacote NuGet Microsoft.EntityFrameworkCore.SqlServer para resolver esse problema.

Estou usando a versão 3.1 do núcleo


2
Esta resposta já foi dada em 29-03-2017. Não há necessidade de repeti-lo novamente
Thomas Weller
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.