Nenhum provedor do Entity Framework encontrado para o provedor ADO.NET com nome invariável 'System.Data.SqlClient'

543

Depois de baixar o EF6 por nuget e tentar executar meu projeto, ele retorna o seguinte erro:

Nenhum provedor do Entity Framework encontrado para o provedor ADO.NET com nome invariável 'System.Data.SqlClient'. Verifique se o provedor está registrado na seção 'entityFramework' do arquivo de configuração do aplicativo. Consulte http://go.microsoft.com/fwlink/?LinkId=260882 para obter mais informações.

insira a descrição da imagem aqui

Fernando Vellozo
fonte
Eu uso o EF5 sem as coisas providerse provider, então considere removê-lo?
ta.speot.is
1
colocar uma cópia de sua seqüência de conexão aqui
pylover
A string de conexão está na figura (App.confing), a propósito, é muito simples, eu chamo o construtor public BaseStorage(): base ("RaptorDB") {}BaseStorage () herda do DbContext no EF5, tudo funcionou perfeitamente, ainda não no EF6.
Fernando Vellozo
10
O problema será resolvido com a instalação do EF6, o segundo projeto (Console), graças a todos que ajudaram de alguma forma!
Fernando Vellozo
3
Para mim, isso parecia ter sido causado pelo Visual Studio, sem perceber que o assembly EntityFramework.SqlServer era realmente usado pelo projeto base. Se você fizer algo como a resposta de @ Carra , não precisará adicionar EF a cada projeto que referenciar seu projeto base - muito mais limpo.
tehDorf

Respostas:

608

Acabei de entrar no mesmo problema e parece que o EntityFramework, embora instalado no NuGet Package Manager, não tenha sido instalado corretamente no projeto.

Consegui corrigi-lo executando o seguinte comando no Package Manager Console :

PM> Install-Package EntityFramework
douglaslps
fonte
34
O PMC escreveu que o 'EntityFramework 6.0.1' já estava instalado, mas o adicionou ao meu aplicativo de console (que NÃO está usando EF), mas também fez o truque para mim. Eu removo o EF das referências de aplicativos do console, retornos de erro, eu não entendi - meu aplicativo do console está usando o projeto do repositório (que usa o EF) Obrigado pela ajuda!
Prokurors
33
Não se esqueça de adicionar -ProjectName <ProjectName> à linha de comando se você tiver vários projetos em sua solução ... !!!
Eugenio Miró
1
Usando a -Preopção tell nuget para instalar pacotes de pré-lançamento. Eu não recomendo usá-lo. Eu tenho um erro semelhante, mas a solução foi apenas instalar o EntityFramework no projeto host. Eu instalei-o em uma biblioteca de classes, mas não no projeto principal (web / console / ou qualquer outro),
Davide Icardi
10
Mesmo problema aqui. Eu tinha um projeto que não tinha uma referência ao EF, mas a dll do EF estava na pasta Debug. A execução deste comando nesse projeto foi adicionada EntityFramework.SqlServer.dllà pasta Debug - problema resolvido.
qujck
4
Na minha situação, esse erro não se apresentou até que eu implantei o projeto em nosso servidor de teste. Na verdade, era o EntityFramework.SqlServer.dll que estava ausente e a instalação do EF por meio do gerenciador de pacotes funcionou. Apenas adicionou as duas referências relevantes ao projeto e, em seguida, adicionou as configurações de entityFramework ao web.config. Eu acho que o IIS local foi capaz de originar o assembly localmente, mas o IIS completo no servidor Web não pôde devido a permissões?
Atters
384

Você adicionou o EF a um projeto de biblioteca de classes. Você também precisa adicioná-lo ao projeto que o referencia (seu aplicativo de console, site ou o que for).

Clément Picou
fonte
247
Esta é uma resposta absolutamente ridícula. Por que diabos eu precisaria fazer isso? E você sabe o que é ainda mais ridículo? Funciona.
Robert
19
Veja minha resposta abaixo, você não precisa instalar o EF no seu aplicativo de console.
Francisco Goldenstein
7
Você responde está correto. Adicione apenas a referência EntityFramework.SqlServer.dll ao projeto de front-end que usa uma biblioteca com EF, corrija o problema. Portanto, não use este EF (somente o DLL)
harveyt
31
Você não precisa adicionar uma referência ao EF no aplicativo console / web. Você só precisa garantir que EntityFramework.SqlServer.dllestá sendo copiado para o diretório bin. Adicionar uma referência forte pode quebrar sua arquitetura (se você construiu várias camadas, seu assembly de execução de nível superior nem deveria saber sobre o EF). Em vez disso, você pode garantir que o provedor do SQL Server seja copiado. Veja por exemplo stackoverflow.com/a/19130718/870604
ken2k
3
Eu suspeito que o motivo pelo qual o EntityFramework.SqlServer.dll não seja detectado como uma dependência, porque o Entity Framework o carrega dinamicamente. Como seu projeto deve saber copiar o provedor SQL quando a única referência a ele está no arquivo de configuração?
Joel McBeth
209

Você não precisa instalar o Entity Framework no aplicativo Console, basta adicionar uma referência ao assembly EntityFramework.SqlServer.dll. Você pode copiar esse assembly do projeto Biblioteca de Classes que usa o Entity Framework para uma pasta LIB e adicionar uma referência a ele.

Em suma:

  • Aplicativo Biblioteca de Classes:
    • Instalar Entity Framework
    • Escreva o código da camada de dados
    • O arquivo app.config possui toda a configuração relacionada ao Entity Framework, exceto a cadeia de conexão.
  • Crie um console, aplicativo da Web ou de desktop:
    • Adicione uma referência ao primeiro projeto.
    • Adicione uma referência ao EntityFramework.SqlServer.dll.
    • app.config / web.config possui a cadeia de conexão (lembre-se de que o nome da entrada de configuração deve ser igual ao nome da classe DbContext.

Espero que ajude.

Francisco Goldenstein
fonte
18
Resposta correta. NÃO é necessário instalar o EF. EntityFramework.SqlServer.dll.
Tom Stickel
15
Eu tenho que concordar. Esta é completamente a resposta correta. Faça referência a uma dll com 1/2 mb ou puxe o projeto de pepita EF que é> 5.5 mb. Reduz um pouco o valor da arquitetura de várias camadas também. Pobre mostrar de MS realmente: Eu tenho 4 camadas e meu top tier realmente deve ter nenhuma razão para saber nada sobre EF
72GM
18
Ainda ridículo de qualquer maneira. Por exemplo, por que um front end precisaria de uma referência ao SqlServer? O front end não poderia se importar menos, no meu caso. Mas funciona. 1
Mike de Klerk
2
Isso foi útil. Muito obrigado.
Peter_the_oak # 9/17
1
Isso não tornará difícil atualizar as versões do EntityFramework? Você precisaria se lembrar de atualizar a referência para a DLL
esmague
114

Você também pode ver esta mensagem se esquecer de incluir "EntityFramework.SqlServer.dll".

Parece ser um arquivo recém-adicionado no EF6. Inicialmente, não o incluí no meu módulo de mesclagem e me deparei com o problema listado aqui.

Mike
fonte
7
Eu me deparei com esse problema quando anteriormente tinha um projeto (a) com uma referência a um projeto (b) que tinha uma referência à EF. Após limpar e excluir a pasta bin do projeto (a) e, em seguida, reconstruir, a referência da EF foi exibida, mas não a EF.SqlServer.dll. Copiar isso no funcionou manualmente para mim
Dan Richardson
2
@dan richardson obrigado por mencionar 'delete bin folder'.
Rajshekar Reddy
Eu recebi o erro ao tentar executar um script LINQPad após uma atualização do EF6. Mesmo referenciar EntityFramework.SqlServer.dll no LINQPad não o corrigiu até que eu reconstruísse minha solução no VS2013. A nova referência foi resolvida corretamente no LINQPad e meu script foi executado!
22414 Chris
No meu caso, eu estava bem no ambiente de desenvolvimento, mas quando publiquei aparece o problema mencionado. Depois de comparar a lista de bibliotecas em dev com a pasta bin no servidor, notei a ausência do EntityFramework.SqlServer.dll, basta fazer o upload e atualizar o aplicativo, e pronto, ele foi consertado.
Henry Rodriguez
Este foi o problema para mim, obrigado! Veja a solução limpa do @Anders para evitar problemas ao esquecer de incluir a DLL em todos os projetos necessários.
SharpC
54

Em vez de adicionar EntityFramework.SqlServer ao host do projeto, você pode garantir uma referência estática a partir do seu projeto de modelo / entidade como este

static MyContext()
{
    var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
    if(type == null)
        throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}

Isso fará com que o processo de construção inclua a montagem com o projeto host.

Mais informações no meu blog http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/

Anders
fonte
5
Eu acho que essa é uma boa solução limpa, na qual não precisamos incluir referências a DLLs relacionadas à persistência em projetos que devem ser independentes da persistência.
JTech
3
Concordou, e se aplica a qualquer biblioteca com dependências implícitas não apenas a persistência
Anders
3
Quando você tem uma dependência explícita de um tipo em uma montagem, ela é copiada pelo processo de criação. No entanto, aqui você não tem uma dependência explícita e o processo de compilação falhará ao copiar o assembly para a pasta de compilação. Meu código apenas garante que exista uma referência explícita a qualquer tipo no referido assembly.
Anders
2
Sem ele, não há dependência explícita para o assembly do seu código e ele não será copiado para a saída.
Anders
2
Isto é brilhante.
Kris
48

Quando você instala o Entity Framework 6 até Nuget. Em algum momento, o EntityFramework.SqlServer perde outro executável. Basta adicionar o Nugetpacote a esse projeto.

Às vezes, acima não funciona no Projeto de Teste

Para resolver esse problema no projeto de teste, basta colocar esse método dentro do projeto de teste:

public void FixEfProviderServicesProblem()
{
    var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

Esse método nunca foi chamado, mas, como minhas observações, o compilador removerá todos os assemblies "desnecessários" e, sem usar o EntityFramework.SqlServermaterial, o teste falhará.

Umar Abbas
fonte
2
Bem, isso não é bonito, mas corrigiu o problema que eu estava tendo no meu projeto de teste. Nenhuma das outras soluções funcionou.
Honorable Chow
No meu caso foi o suficiente para adicionar o Entity Framework também para meu projeto de teste em "Gerenciar pacotes NuGet para a solução"
Juha Palomäki
Na verdade, você precisa colocar em qualquer projeto (não apenas teste) para garantir que System.Data.Entity.SqlServer será incluído no "conjunto de resultados da lib" após a compilação (observação: o Unity ou outra ferramenta de IoC pode alterar essa regra e você precisa chamar esse código do projeto de teste).
Roman Pokrovskij
Esta é realmente a melhor solução, porque você não precisa pulverizar referências da estrutura da entidade em qualquer lugar do seu projeto.
Daniel Lobo
Isso me indicou a direção certa. O EntityFramework.SqlServeré adicionado à sua biblioteca de classes, mas, se não for utilizado, não será colocado dentro da pasta de saída do seu aplicativo. Corrigi o problema adicionando um ExecutionStrategy, o que eu ainda precisava fazer; portanto, adicionar uma linha como SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());dentro de uma DbConfigurationclasse corrigiu o problema.
Jan_V
24

Adicione esta função

private void FixEfProviderServicesProblem()

para a classe de contexto do banco de dados na classe da biblioteca e a DLL EntityFramework.SqlServer.dll ausente será copiada para os locais corretos.

namespace a.b.c
{
    using System.Data.Entity;

    public partial class WorkflowDBContext : DbContext
    {
        public WorkflowDBContext()
            : base("name=WorkflowDBConnStr")
        {
        }

        public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
        public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
        public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
        public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
        public virtual DbSet<TaskItem> TaskItems { get; set; }
        public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }

        private void FixEfProviderServicesProblem()
        {
            // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
            // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
            // Make sure the provider assembly is available to the running application. 
            // See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
    }
}

.

Johannes
fonte
desculpe tentar revogá-lo ... como eu não achava que funcionaria ... e funciona! ... diz que não posso mudar meu voto, a menos que a resposta seja editada, porque já faz muito tempo e já foi bloqueado ...
Seabizkit 31/03
Isso funcionou para mim também. Temos um projeto de biblioteca que usa EF 6 e um aplicativo de console que usa a biblioteca. Estávamos recebendo a mesma exceção do OP. Não queremos colocar a configuração específica do EntityFramework no arquivo de configuração do aplicativo, portanto esse método funcionou para nós. Obrigado
Rob
1
Onde você chama FixEfProviderServicesProblemeu tentei no construtor, sem sorte.
Francis Ducharme
1
Eu nunca chamo isso - não precisa. O fato de estar lá faz com que o .net pense que é necessário e inclui o EntityFramwork como dependência.
Johannes
Provavelmente em stackoverflow.com/a/19130718/1467396 ? Mas +1, enfim, pela clareza de como / onde usá-lo.
David
20

Nada disso funcionou para mim. Encontrei a solução em outra questão de stackoverflow . Vou adicioná-lo aqui para fácil referência:

Você precisa fazer uma referência, para que ela seja copiada no caminho do aplicativo. Porque mais tarde será referenciado em tempo de execução. Portanto, você não precisa copiar nenhum arquivo.

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Carra
fonte
2
Este! Não há necessidade de adicionar uma referência a outros projetos que possam fazer referência a esta montagem.
tehDorf
8

Eu recebi o mesmo erro ao usar o Entity Framework 6 com o SQL Server Compact 4.0. O artigo no MSDN para provedores de estrutura de entidades para EF6 foi útil. A execução dos respectivos comandos do provedor como pacotes nuget no Package Manager Console pode resolver o problema, pois os pacotes NuGet também adicionarão registros automaticamente ao arquivo de configuração. Eu corri PM> Install-Package EntityFramework.SqlServerCompactpara resolver o problema.

MaySara
fonte
2
Estou realmente surpreso que ninguém tenha votado nisso até agora! A mensagem de erro indica claramente: o motivo do erro é que, após a atualização do EF, não há realmente nenhuma definição de provedor para o SQL Compact no arquivo web.config do aplicativo! A adição do pacote mencionado corrige o arquivo web.config, e haverá um provedor definido.
Csaba Toth
1
simplesmente salva-vidas. Deve ser marcado como resposta, pois proporciona claramente solução para o problema
ZafarYousafi
7

Hoje, encontrei esse problema ao trabalhar com um conjunto de serviços da Web, cada um em projetos diferentes, e um projeto separado contendo testes de integração para alguns desses serviços.

Estou usando essa configuração há algum tempo com o EF5, sem precisar incluir referências ao EF no Projeto de Teste de Integração.

Agora, após a atualização para o EF6, parece que também preciso incluir uma referência ao EF6 no projeto de teste de integração, mesmo que não seja usado lá (praticamente como indicado acima pelo usuário3004275 ).

Indicações que você está enfrentando o mesmo problema:

  • As chamadas diretamente para o EF (conexão com um banco de dados, obtenção de dados etc.) funcionam bem, desde que sejam iniciadas a partir de um projeto que tenha referências ao EF6.
  • As chamadas para o serviço por meio de uma interface de serviço publicada funcionam bem; ou seja, não há referências ausentes "internamente" no serviço.
  • Chamadas diretamente para métodos públicos no projeto de serviço, de um projeto fora do serviço, causarão esse erro, mesmo que o EF não seja usado no próprio projeto; somente internamente no projeto chamado

O terceiro ponto é o que me excitou por um tempo, e ainda não sei por que isso é necessário. Adicionar um ref ao EF6 no meu projeto de Teste de Integração resolveu em qualquer caso ...

Kjartan
fonte
7

Quando o erro ocorre nos projetos de testes, a solução mais bonita é decorar a classe de teste com:

[DeploymentItem("EntityFramework.SqlServer.dll")]
Alberto Juan
fonte
É bonito mesmo, mas gera mais trabalho e é mais fácil de esquecer. Com o truque "referência forçada", você só precisa fazer isso nos projetos que realmente precisam usar o EF.
Charles Roberto Canato
7

O projeto de inicialização que faz referência ao projeto em que o Entity Framework está sendo usado precisa dos dois seguintes assemblies na pasta bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Adicionar a <section>ao <configSections>arquivo .config no projeto de inicialização torna o primeiro assembly disponível nesse diretório bin. Você pode copiar isso do arquivo .config do seu projeto do Entity Framework:

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

Para disponibilizar o segundo arquivo .dll na pasta bin, embora não seja prático, uma cópia manual da pasta bin do projeto do Entity Framework pode ser feita. Uma alternativa melhor é adicionar ao projeto Eventos pós-compilação do Entity Framework as seguintes linhas, que automatizarão o processo:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\
Leonel B.
fonte
2
Obrigado, eu tenho o framework Entity em uma camada de dados, por isso é isolado, mas é lamentável que a Microsoft não nos permita isolar verdadeiramente a camada de dados e nos faça poluir o UX com uma tecnologia de banco de dados. Eu esperava que não tivesse que fazer isso.
Matt
4

Acabei de encontrar este problema hoje. Eu tenho uma biblioteca de classes de repositório de dados com o pacote EF63 NuGet e o aplicativo de console para teste, que têm referência apenas ao projeto da biblioteca de classes. Criei um comando pós-compilação muito simples, que copia EntityFramework.SqlServer.dll da pasta Bin \ Debug da biblioteca de classes para a pasta Bin \ Debug do aplicativo do console e o problema foi resolvido. Não se esqueça de adicionar a seção entityFramework ao arquivo .config do aplicativo de console.

Ondřej
fonte
4

Adicione abaixo ao seu app.config.

 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
Taran
fonte
Você também precisa registrá-lo para <configSections>- #<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove
É isso que "IInstall-Package EntityFramework" faz. Isso não é realmente necessário porque o EntityFramework, por padrão, tenta carregar EntityFramework.SqlServer.dll para o nome invariável SqlClient. Este método pode ser usado para substituir o provedor.
user1295211
3

A exclusão da pasta BIN fez isso por mim

David
fonte
3

Você deve forçar uma referência estática ao assembly EntityFramework.SqlServer.dll , mas em vez de colocar um código fictício, você pode fazer isso de uma maneira mais bonita:

  1. Se você já possui uma classe DbConfiguration :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Se você não possui uma classe DbConfiguration, deve colocar o seguinte código na inicialização do aplicativo (antes que o EF seja usado):

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
Rosberg Linhares
fonte
2

Acabei de reinstalar o Entity Framework usando o Nuget. E siga as instruções escritas no link abaixo: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

Eu acho que o problema será resolvido.

Kuntal Ghosh
fonte
Uma explicação seria legal! Por que você tem que re-instalá-lo e assim por diante
Rizier123
1
Porque, por algum motivo desconhecido, as alterações não terão efeito e, por isso, reinstalei o EntityFramework 6.1.1 e, depois disso, ele entrou em vigor.
Kuntal Ghosh
2

Expanda o arquivo YourModel.edmx e abra a classe YourModel.Context.cs em YourModel.Context.tt.

Eu adicionei a seguinte linha na seção using e o erro foi corrigido para mim.

using SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;

Talvez seja necessário adicionar essa linha ao arquivo sempre que o arquivo for gerado automaticamente.

user2347528
fonte
2

Também tive um problema semelhante. Meu problema foi resolvido da seguinte maneira:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

BehrouzMoslem
fonte
2

parece que ninguém mencionou primeiro, verificando se System.Data.SqlClient está instalado no sistema e se é feita uma referência a ele.

Resolvi meu problema instalando System.Data.SqlClient e adicionando um novo provedor no app.Config

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
Tobi Owolawi
fonte
1

Além disso, verifique se o projeto de inicialização é o projeto que contém seu dbcontext (ou app.config relevante). O meu estava tentando iniciar um projeto de site que não tinha todas as configurações necessárias.

user2588362
fonte
1

Eu tentei quase tudo o que precede e nada funcionou.

Só quando eu definir as DLLs referenciadas no padrão de projeto EntityFrameworke EntityFramework.SqlServerpropriedades Copy Localpara Trueque ele começar a trabalhar!

SharpC
fonte
1

pessoal, preciso da atenção de que duas dll EntityFramework.dll e EntityFramework.SqlServer.dll são a biblioteca de camadas DataAccess E não é lógico usá-las na exibição ou em qualquer outra layer.it resolve o seu problema, mas não é lógico.

A maneira lógica é que o atributo ilimitado os remova e substitua pela API Fluent. essa é a solução real

Vahid Akbari
fonte
1

Eu tinha um aplicativo de console e uma biblioteca de classes. Na biblioteca de classes, criei o Entity Data Model (clique com o botão direito do mouse em Class Library> Adicionar> Novo Item> Dados> ADO.NET Entity Data Model 6.0) e coloquei a referência no aplicativo do console. Portanto, você tem um aplicativo de console que tem referência à biblioteca de classes e, dentro da biblioteca de classes, possui o modelo EF. Eu tive o mesmo erro quando tentei obter alguns registros da tabela.

Resolvi esse problema seguindo estas etapas:

  1. Clique com o botão direito do mouse na solução e escolha a opção 'Gerenciar pacotes NuGet para solução' e a janela do gerenciador de pacotes NuGet será exibida.
  2. Vá para a opção 'Gerenciar' em 'Pacotes instalados' DICA: O Entity Framework é adicionado à Biblioteca de classes, assim você terá o EntityFramework em 'Pacotes instalados' e verá a opção 'Gerenciar'
  3. Clique na opção 'Gerenciar' e marque para instalar o pacote no projeto que tem referência à biblioteca de classes que possui o modelo EF (no meu caso, marquei a caixa de seleção para instalar o pacote no aplicativo do console que tinha referência à biblioteca de classes que possuía o modelo EF)

Era tudo o que tinha que fazer e tudo funcionava perfeitamente.

Espero que tenha ajudado.

dkkd
fonte
1

Eu tenho o mesmo erro. É estranho que isso aconteça sempre que eu usei meu dbContext para consultar qualquer modelo do meu modelo ou obter uma lista como:

var results = _dbContext.MyModel.ToList();

Tentamos reinstalar o Entity Framework, referenciá-lo adequadamente, mas sem sucesso.

Felizmente, tentamos verificar o Nuget em busca de ALLsoluções, atualizamos tudo ou certificamos everythinga mesma versão, porque percebemos que os dois projetos têm versões EF diferentes no projeto da Web. E isso funciona. O erro se foi.

Aqui está a captura de tela sobre como gerenciar o Nuget para todas as soluções:

insira a descrição da imagem aqui

Willy David Jr
fonte
1

Você está apenas faltando uma referência para EntityFramework.SqlServer.dll. Para projetos EntityFramework usando o SQL Server, os dois arquivos que você precisa consultar são EntityFramework.SqlServer.dll e EntityFramework.dll

user2956314
fonte
0

Eu tive um problema relacionado ao migrar de um banco de dados CE para o Sql Server no Azure. Apenas desperdiçou 4 horas tentando resolver isso. Espero que isso possa salvar alguém de um destino semelhante. Para mim, eu tinha uma referência ao SqlCE no meu arquivo packages.config. A remoção resolveu todo o problema e me permitiu usar migrações. Yay Microsoft para outra tecnologia com desnecessariamente complexos problemas de instalação e configuração.

user2662643
fonte
0

Eu tive o mesmo problema, copiei o arquivo App Config do projeto que continha o DBContext para o meu projeto de teste

stephen ebichondo
fonte
0

Eu tive a mesma exceção lançada. eu incluí

using System.Data; 
using System.Data.Entity;

e tudo voltou a funcionar ..

kneerunjun
fonte
0

Como a mensagem mostra que precisamos adicionar o provedor System.Data.SqlClient, é por isso que precisamos instalar o pacote de nuget do EntityFramework que possui duas dll, mas se estiver desenvolvendo apenas um aplicativo de console, basta adicionar a referência do EntityFramework.SqlServer.dll

Sandeep Shekhawat
fonte