Não foi possível carregar o tipo de provedor de estrutura de entidades?


420

Estou tentando executar meus testes no TeamCity, que está atualmente instalado na minha máquina.

System.InvalidOperationException:

O tipo de provedor do Entity Framework ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'para o System.Data.SqlClientprovedor ' 'ADO.NET não pôde ser carregado. Verifique se o conjunto do provedor está disponível para o aplicativo em execução.

Consulte http://go.microsoft.com/fwlink/?LinkId=260882 para obter mais informações.

Não tenho referência a System.Data.Entitynenhum dos meus projetos, como foi sugerido no codeplex para atualizar para o EF6.

Portanto, não sei por que estou recebendo essa exceção. Não recebo nenhuma exceção ao executar os testes do VS.

Tentei definir CopyLocal como false e novamente como true ... mas isso também não parece funcionar.

Atualizar

Meu app.config tem o seguinte. Isso causa algum comportamento que eu não entendo?

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

Eu recebo o seguinte stacktrace no teamcity.

[MSTest] IntegrationTests.CrudTest+QuestionTest.Create
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 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..
[03:59:11]
[IntegrationTests.CrudTest+QuestionTest.Create]     at System.Data.Entity.Config.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName)
   at System.Data.Entity.Config.ProviderServicesFactory.GetInstanceByConvention(String providerInvariantName)
   at System.Data.Entity.Config.DefaultProviderServicesResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Config.CachingDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.RootDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.CompositeResolver`2.GetService(Type type, Object key)
   at System.Data.Entity.Config.IDbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   at System.Data.Entity.Config.InternalConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Config.DbConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderServices(DbProviderFactory factory)
   at System.Data.Entity.Infrastructure.DefaultManifestTokenService.GetProviderManifestToken(DbConnection connection)
   at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
   at System.Data.Entity.DbSet`1.Add(TEntity entity)
   at EFRepository.Infrastructure.EFRepository`1.Add(T item) in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\Repository\Infrastructure\EFRepository.cs:line 22
   at IntegrationTests.CrudTest.Initialize() in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\IntegrationTests\CrudTest.cs:line 34

1
O EntityFramework.SqlServer.dll é implantado junto com o EntityFramework.dll? No EF6, os provedores SqlServer e SqlServerCE não estão no mesmo conjunto que o mecanismo EF, como estava nas versões anteriores. Você não deve adicionar uma referência ao System.Data.Entity.dll. O modelo de provedor no EF6 alterado em comparação com o provedor EF5 e EF5 simplesmente não funcionará. Além disso, você pode bater alguns problemas complicados (como EF5 tipos geoespaciais tratados como tipos de entidade em EF6)
Pawel

Sim, verifiquei duas vezes que não há referência ao System.Data.Entity e as referências ao EntityFramework.dll e ao EntityFramework.SqlServer.dll estão presentes. Novamente, o projeto compila e testa executado no VS. É somente quando os testes são executados no TeamCity que o erro surge.
ashutosh Raina

Esta é uma configuração correta. Não usei o TeamCity, mas parece-me que, quando seu aplicativo é implantado para executar os testes com o TeamCity, o EntityFramework.SqlServer.dll está ausente e, portanto, é a exceção.
Pawel

1
veja a resposta deste post: stackoverflow.com/questions/21175713/… Adicionei a private volatile Type _dependency...resposta e funcionou! Apenas cheira mal que eu tenho que adicionar uma classe separada como esta apenas para que a EF trabalhe no TeamCity.
A11smiles

2
Eu desinstalei o EntityFramework dos pacotes nuget e instalei novamente e ele foi corrigido
abhyudayasrinet

Respostas:


426

Mesmo problema, mas eu instalei o EF 6 através do Nuget. Faltava EntityFramework.SqlServer para outro executável. Simplesmente adicionei o pacote nuget a esse projeto.


108
Eu notei isso também. Se você criar uma biblioteca que usa EF, o VS colocará o EF.dll e o EF.SqlServer.dll nessa pasta de compilação. Mas se você agora tiver outro programa para fazer uso da sua biblioteca, somente o EF.dll será colocado nessa pasta de compilação. O EF.SqlServer.dll está ausente. Se você o adicionar manualmente à pasta de compilação, o programa funcionará. Não é uma boa solução por si só, mas mostra que o problema é que o EF.SQLServer.dll ausente é a causa do erro.
22413 Eric

44
Adicionei var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices); Em seguida, meu aplicativo funcionou
Brian

33
Sempre me preocupo quando digito um código que não faz absolutamente nada e, de repente, meu projeto é executado. O_o
Jordânia

10
Além disso, devido à otimização do compilador, você também pode querer fazer x.ToString()isso, ou ele eliminará os typeofs no Release.
Jordânia

15
Acho irritante que o EF 6.1 agora precise do EF instalado no meu DLL / Projeto ASPX, enquanto o EF 5.0 só precisava dele no meu DLL / Projeto da camada de dados.
PeterX

274

Eu tive o mesmo problema em meus projetos de teste - instalei os bits EF6 mais recentes via NuGet e sempre que invocava algo relacionado ao EF, obtinha:

O tipo de provedor Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' para o provedor ADO.NET 'System.Data.SqlClient' não pôde ser carregado. Verifique se o conjunto do provedor está disponível para o aplicativo em execução. Consulte http://go.microsoft.com/fwlink/?LinkId=260882 para obter mais informações.

Minha solução alternativa: coloquei esse método dentro do meu projeto de teste:

public 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;
}

Esse método nunca foi chamado, mas acho que o compilador removerá todos os assemblies "desnecessários" e, sem usar o material EntityFramework.SqlServer, o teste falhará.

De qualquer forma: funciona na minha máquina;)

Nota: Em vez de adicionar o método para testar o projeto, você pode garantir uma referência estática ao SqlProviderServices do seu projeto de Modelo / entidade .


24
Acabei fazendo o mesmo. Gostaria de falar com a pessoa que fez desta montagem uma dependência de abrir uma conexão com o db. Em seu universo alternativo, todos os nossos projetos de front-end que possuem arquivo de configuração com uma cadeia de conexão devem fazer referência ao EntityFramework apenas para obter essa DLL para abrir a conexão. De que maneira isso faz sentido, eu não entendo.
juhan_h

3
É um truque, mas é a melhor / mais fácil solução que encontrei para o cenário em que você não tem um pacote de implantação criado para o seu projeto.
Kon

3
Para todos vocês usando outras sugestões, como "var x = typeof (SqlProviderServices);". Somente esta solução fornecida por Robert trabalha no desenvolvimento e construção de máquinas !!!
Alexander Schmidt

3
Obrigado Robert, é ridículo pela equipe da EF, mas de qualquer maneira isso está funcionando para mim.
Hitesh

7
Para ficar claro: adicionar o código acima à sua DbContextclasse resolverá o problema no EF 6.1. Dessa forma, você não precisa incluir o pacote Entity Framework Nuget no seu projeto front-end (WebApi, etc) e pode deixar tudo relacionado ao EF em sua camada de dados.
Nick

106

Nuget configurará seu projeto EF6 para referenciar EntityFramework.SqlServer.dll. Isso é implantado na pasta de saída do seu projeto EF6 durante a compilação, mas não será implantado na pasta de saída dos projetos que fazem referência ao seu projeto EF6. Eu acredito que isso ocorre porque o Visual Studio é "inteligente" o suficiente para detectar que nada no seu assembly está realmente usando a dll diretamente e, portanto, não o inclui. Você pode forçar o EntityFramework.SqlServer.dll a ser implantado na pasta de saída dos projetos que fazem referência ao seu projeto EF6 (testes de unidade, UIs etc.) adicionando código ao seu projeto EF6 que usa EntityFramework.SqlServer.dll. Cuidado para não colocar o código em uma classe gerada, pois corre o risco de perdê-lo na próxima regeneração. Eu escolhi adicionar a seguinte classe ao assembly, que resolveu o problema.

using System.Data.Entity.SqlServer;

internal static class MissingDllHack
{
    // Must reference a type in EntityFramework.SqlServer.dll so that this dll will be
    // included in the output folder of referencing projects without requiring a direct 
    // dependency on Entity Framework. See http://stackoverflow.com/a/22315164/1141360.
    private static SqlProviderServices instance = SqlProviderServices.Instance;
}

1
Isso resolveu o problema para mim em relação ao MSTest. Eu gosto desse método porque não exige que eu faça algo complicado com a herança de classe em minhas classes de teste. Basta incluir a classe em algum lugar na montagem de teste e no MAGIC. Obrigado!
precisa saber é o seguinte

Exatamente, esse é o motivo pelo qual não está copiando o sqlserver.dll para a saída dos projetos de referência. Isso acontece quando você tem mais uma camada entre a execução do aplicativo e o conjunto de contexto. Graças isso resolveu meu problema.
Bharat

2
Para aqueles que não desejam gastar 4 segundos pesquisando: using System.Data.Entity.SqlServer;
TTT

Usamos uma classe base comum para testes de unidade, todos os testes de unidade herdam dessa classe. Adicionar esse método a essa classe significa que todos os projetos com uma classe de teste de unidade herdada da classe base funcionam bem.
MaxJ

3
Ponto pequeno, mas provavelmente é melhor adicionar um comentário a esta classe para explicar por que é necessário.
precisa

43

Minha solução foi remover a estrutura da entidade do projeto por meio do gerenciador de nuget e adicioná-la novamente.


9
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
VahidN

Isso funcionou para mim, e eu acho que pode ser a solução ideal
ccoutinho

Solução simples e limpa que funciona. Deve ser muito maior na lista
mode777

29

Eu resolvi isso adicionando um stament usando no topo da minha classe DBContext, assim:

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

1
Esta é a solução mais limpa para esse problema. Obrigado.
Alexandru Dicu

Esta solução funciona e parece limpa. Pergunta: não perderemos o ID da linha que a classe DBContext é atualizada? ou seja, usando a geração de classe edmx?
NoloMokgosi 5/05

Não posso acreditar que isso era necessário e de alguma forma não foi corrigido pela Microsoft - mas isso funcionou para mim. Obrigado por uma solução simples.
Tsar Bomba

Esta solução é funcionalmente a mesma que MissingDllHack . Pode parecer mais limpo, mas introduz o código da solução alternativa na sua classe de contexto. Esse código também será sinalizado para remoção por ferramentas como ReSharper e pode ser facilmente perdido com o tempo. Uma boa solução, mas eu prefiro manter a solução alternativa separada do contexto de uma maneira que não produza avisos de código.
Timothy Schoonover 11/11

20

Eu usei o registro baseado em código para provedor. link1 link2

Acabei de criar a classe de configuração como

class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        this.SetDatabaseInitializer(new DropCreateDatabaseAlways<MyDbContext>());
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

O ponto principal é this.SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

e usou dessa maneira

[DbConfigurationType(typeof(DbContextConfiguration))]
public class MyDbContext : DbContext
{
    public MyDbContext()
    {
        ...
    }

    public DbSet<...> ...{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...
    }
}

Eu tenho dois projetos em uma solução. A primeira é a biblioteca de classes com o conjunto da estrutura da entidade, a classe DbContext e os arquivos tt. O segundo projeto é o Windows Forms que deve obter dados usando o ef-project. @ Nash: Você poderia elaborar onde (em qual projeto) você colocou sua turma DbContextConfiguration? Obrigado
surfmuggle

Como mencionado acima, parece que referências adicionais são uma maneira de corrigir isso (veja o comentário de eric). Usei o console nuget e disparei este comando: Get-Project MyWinformsProject | Install-Package EntityFrameworkque o corrigiu para mim. Ainda assim, eu gostaria de entender melhor o motivo.
surfmuggle

DbContextConfiguration parecia já estar presente (vs 2013), a adição da linha DbConfiguraton acima da minha classe MyDbContext não resolveu o problema para mim.
Anders Lindén

Você não precisa de uma classe DbConfiguration . Coloque o seguinte código na inicialização do aplicativo (antes EF é usado): DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Rosberg Linhares

14

Eu resolvi isso com [DeploymentItem] na minha classe de inicialização do assembly

namespace MyTests
{
    /// <summary>
    /// Summary description for AssemblyTestInit
    /// </summary>
    [TestClass]
    [DeploymentItem("EntityFramework.SqlServer.dll")]
    public class AssemblyTestInit
    {
        public AssemblyTestInit()
        {
        }

        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        [AssemblyInitialize()]
        public static void DbContextInitialize(TestContext testContext)
        {
            Database.SetInitializer<TestContext>(new TestContextInitializer());
        }
    }
}

9

Tarde para a festa, mas as respostas mais votadas pareciam hack para mim.

Tudo o que fiz foi remover o seguinte do meu app.config no projeto de teste. Trabalhou.

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

A verdadeira solução!
Ben F

8

Estou com problema, porque não adiciono referência ao EntityFramework.sqlServer.dll. Quando eu desenvolvo um programa, ele funciona. Mas quando publico um aplicativo e o instalo, gera um erro.

Acabei de adicionar referência e criar e publicar novamente.

Referências


Eu fiz este e deu certo. Basicamente, o projeto mostrará um aviso quando os componentes das bibliotecas não forem indicados adequadamente.
Kbvishnu

5

Eu resolvi isso copiando manualmente o EntityFramework.SqlServer.dllarquivo para o bin folderaplicativo principal.


4

Eu finalmente resolvi isso. Acontece que eu tive uma implementação incorreta de IDIsposable na minha classe de repositório. Eu consertei isso. A implementação incorreta causou uma exceção do stackoverflow, pois eu não estava descartando os recursos corretamente. Isso fez com que o VS não executasse os testes e o mecanismo de execução do teste travou.

Arquivei na Microsoft aqui (isso foi antes de eu obter a solução correta). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

De qualquer forma, as compilações agora funcionam bem no teamcity. Embora eu ainda esteja curioso para saber por que nenhum mecanismo de execução do VS Test teve uma maneira graciosa de me dizer o que estava acontecendo, não o Team City.

Eu descobri a causa raiz depurando manualmente o teste (que eu só percebi depois de tantos dias, a correção levou 5 segundos).

Espero que isso ajude alguém que se depara com esses problemas.


4

Vejo um problema semelhante e, usando o método deste post: ( http://entityframework.codeplex.com/workitem/1590 ), que resolve meu problema.

Para contornar o problema, você pode fazer seu assembly de teste referenciar diretamente o assembly do provedor, adicionando alguma linha como esta em qualquer lugar do assembly de teste: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;


3

Quando inspecionei o problema, notei que a seguinte DLL estava ausente na pasta de saída. A solução simples é copiar Entityframework.dll e Entityframework.sqlserver.dll com o app.config para a pasta de saída, se o aplicativo estiver no modo de depuração. Ao mesmo tempo, altere o parâmetro da opção de construção "Copiar para a pasta de saída" do app.config para copiar sempre. Isto irá resolver o seu problema.


2
Eu configurei "Copy Local" true para "EntityFramework.SqlServer" apenas. Agora funciona.
Alezis

3

Basta referenciar ou navegar na dll EF - EntityFramework.SqlServer.dll


Foi o que eu fiz. Copiou a referência para "EntityFramework.SqlServer" da minha biblioteca para o projeto "running". Isso funcionou!
Håkon K. Olafsen

3

Eu tive o mesmo problema que tentei várias vezes, mas não foi resolvido, mas quando instalo o pacote EntityFramework.SqlServerCompact, ele resolveu instalar este pacote no Nuget package Manager.

Install-Package EntityFramework.SqlServerCompact

3

Eu criei um arquivo estático de "inicialização" e adicionei o código para forçar a DLL a ser copiada para a pasta bin, como forma de separar essa 'configuração'.


[DbConfigurationType(typeof(DbContextConfiguration))] public static class Startup { }

public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        // This is needed to force the EntityFramework.SqlServer DLL to be copied to the bin folder
        SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}


1
Obrigado! Esta foi uma grande ajuda.
Addison Schuhardt

1
Fico feliz que você encontrou minha resposta útil @AddisonSchuhardt :)
hatsrumandcode

2

Eu não queria uma referência ao EF no meu projeto de aplicativo (ou para copiar manualmente qualquer coisa), então adicionei isso aos eventos de Pós-construção do meu projeto EF:

cp $(TargetDir)EntityFramework.SqlServer.dll $(SolutionDir){your-main-bin-folder}

2

Isso acontece apenas dentro dos meus projetos de teste de carga / unidade. Frustrante, eu o fiz surgir em um projeto em que estou executando há 2 anos. Deve ter havido alguma ordem de execução de teste que quebra as coisas. Acho que assim que o fi é removido, ele se foi.

Eu descobri que simplesmente declarar uma variável que usa o valor correto corrige o problema ... Eu nunca chamo o método. Apenas defina. Estranho, mas funciona.

    /// <summary>
    /// So that the test runner copies dlls not directly referenced by the integration project
    /// </summary>
    private void referenceLibs()
    {
        var useless = SqlProviderServices.Instance;
    }

2

Depois de tentar todas as outras soluções sugeridas e não fazer meu projeto funcionar, finalmente encontrei um pequeno comentário nesta página :

A exclusão da pasta BIN fez isso por mim

E funcionou para mim também.


1
Eu estava fundindo duas filiais - meu projeto não teve alterações relacionadas à EF, mas minhas unittests começaram a falhar sem motivo. A exclusão da pasta BIN os fez funcionar novamente.
Arno Peters

@ Zeek2 este erro é complicado. Existem muitas sugestões diferentes para resolver esse problema na página que citei. Esta é apenas uma das muitas soluções possíveis. Continue pesquisando até encontrar a solução que será aplicada ao seu problema específico e boa sorte.
Ulysses Alves

1

A adição de Entityframework.dll e Entityframework.sqlserver.dll ao projeto de referência resolveu o problema.


1

Eu verifiquei a janela Debug Output no projeto Unit Test. EntityFramework.SqlServer.dll não foi carregado. Depois de adicioná-lo à pasta bin, os testes foram executados com sucesso.


1

Eu 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


1

Eu tive o mesmo problema com o DBContextobjeto de instanciação de um projeto de teste de unidade. Eu verifiquei meus pacotes de projeto de teste de unidade e achei queEntityFramework pacote não estava instalado, instalei o do Nuget e resolvi o problema (acho que é um bug do EF).

codificação feliz


0

Acabei de receber a mesma mensagem de erro.

Eu tenho um projeto separado para o meu acesso a dados. A execução do projeto da Web (que referenciou o projeto de dados) funcionou localmente bem. Mas quando implantei o projeto da web para criar o azure do assembly: EntityFramework.SqlServer não foi copiado. Acabei de adicionar a referência ao projeto web e reimplantá-lo, agora ele funciona.

espero que isso ajude os outros


0

Eu estava trabalhando no tutorial da Contoso University offline e encontrou o mesmo problema ao tentar criar meu primeiro controlador usando EF. Eu tive que usar o Package Manager Console para carregar o EF do cache de nuget e criei uma cadeia de conexão para minha instância local do SQL Server. Meu ponto aqui é a minha configuração webConfig para EF pode não estar definida como todos, mas eu consegui resolver meu problema excluindo completamente a seção "fornecedores" em "entityFramework"

Robert


0

Existe uma solução fácil. abra as referências no seu projeto, clique com o botão direito do mouse em "System.Data" -> Propriedades. Altere "Copiar local" para "Verdadeiro".

Problema deve ser corrigido.


0

No meu caso, resolvi o problema instalando o SQL Server 2012 Developer Edition quando havia instalado o SQL Server Express 2012 (x64). Parece que me forneceu a dependência que faltava.


0

remova a estrutura da entidade do projeto via nuget e adicione-a novamente.


0

No meu caso, dllnão foi copiado, embora eu tenha adicionado uma referência a ele. Isso ocorre porque EntityFramework.SqlServer.dllnão é copiado para o seu projeto. Adicione essa dll e esperamos que funcione. Você pode encontrar isso no projeto em que adicionou o modelo de dados.


0

Além de todas as sugestões úteis aqui, se você estiver usando o EF 6.1.3, verifique se a versão .net do seu projeto é 4.5 ou superior.

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.