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 ).

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

Respostas:

24

Esse é um problema conhecido no sistema do projeto. Veja dotnet / project-system # 1741

bricelam
fonte
Obrigado, resolvi o problema voltando ao framework .net de segmentação central.
Maxime Laflamme 31/03
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")));
Ganhar
fonte
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

Victor.Uduak
fonte
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

Phani K
fonte
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 
Daniel Melo
fonte
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)
);
Bruno Pereira
fonte
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

Krishna
fonte
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.

Bugay Sarikaya
fonte
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;

Hevski
fonte
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.

Andrew S
fonte
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.
Askar
fonte
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.

Wen Qin Yap
fonte
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")));
        }
Jaydeep Shil
fonte
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

TAHA SULTAN TEMURI
fonte
1

Eu contornei isso simplesmente:

Adicionar SqlServerDbContextOptionsExtensions à turma em questãoSqlServerDbContextOptionsExtensions

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

Baz G
fonte
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.

Vima91
fonte
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.

pso
fonte
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.

Ian Gibblet
fonte
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

Willie Cheng
fonte
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

hmota
fonte
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.

Novato
fonte
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

Eric Conklin
fonte
0

Pacote de instalação:

**Microsoft.EntityFrameworkCore.SqlServer**

adicione o topo da sua turma:

**Microsoft.EntityFrameworkCore;**

isso funcionou para mim

nh Dalim
fonte
0

Eu tive que usar a linha

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

no método ConfigureServices em Startup.cs

Blain Ellis
fonte
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

kiwi7
fonte
-1

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

Estou usando a versão 3.1 do núcleo

Mehedi Hasan
fonte
2
Esta resposta já foi dada em 29-03-2017. Não há necessidade de repeti-lo novamente
Thomas Weller