the - c# no entity framework provider found




Non è stato possibile caricare il tipo di provider di Entity Framework? (20)

Sto cercando di eseguire i miei test su TeamCity che è attualmente installato sulla mia macchina.

System.InvalidOperationException :

Il provider Entity Framework digita " System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer , Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' per il provider ADO.NET " System.Data.SqlClient " non può essere caricato. Assicurarsi che l'assembly del provider sia disponibile per l'applicazione in esecuzione.

Vedere http://go.microsoft.com/fwlink/?LinkId=260882 per ulteriori informazioni.

Non ho alcun riferimento a System.Data.Entity in nessuno dei miei progetti, come suggerito su codeplex per l'aggiornamento a EF6.

Quindi, non sono sicuro del motivo per cui ricevo questa eccezione. Non ottengo alcuna eccezione quando eseguo i test da VS.

Ho provato a impostare CopyLocal su false e poi su true .. ma sembra che non funzioni neanche.

Aggiornare

Il mio app.config ha il seguente. Questo causa qualche comportamento che non capisco?

<?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>

Ottengo il seguente stacktrace in 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

Alla fine ho risolto questo. Risulta, ho avuto un'errata implementazione di IDIsposable nella mia classe di repository. L'ho risolto. L'implementazione errata ha causato un'eccezione di poiché non stavo eliminando le risorse correttamente. Ciò ha indotto VS a non eseguire i test e il motore di esecuzione del test si è bloccato.

L'ho archiviato con Microsoft qui (questo era prima che avessi la soluzione corretta). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

Ad ogni modo, le build ora funzionano bene su teamcity. Anche se, sono ancora curioso di sapere perché né il motore di esecuzione di VS Test ha avuto un modo elegante di dirmi cosa stava succedendo non a Team City.

Ho scoperto la causa principale eseguendo manualmente il debug del test (che ho realizzato solo dopo tanti giorni, la correzione mi ha richiesto 5 secondi).

Speriamo che questo possa aiutare qualcuno che si imbatte in questi problemi.


Assicurarsi che EntityFramework.dll, EntityFramework.SqlServer.dll e la DLL del provider (per SQL Server Compact, che sarà EntityFramework.SqlServerCompact.dll) siano nella cartella dell'applicazione distribuita. Questo è particolarmente importante per l'applicazione distribuita.


C'è una soluzione semplice. apri i riferimenti nel tuo progetto, fai clic con il tasto destro su "System.Data" -> proprietà. Cambia "Copia locale" su "Vero".

Il problema dovrebbe essere risolto


Dopo aver provato tutte le altre soluzioni suggerite e non riesco a far funzionare il mio progetto, alla fine ho trovato un piccolo commento in questa pagina :

L'eliminazione della cartella BIN lo ha fatto per me

E ha funzionato anche per me.

Ora non posso dire se devi solo cancellare la cartella bin e funzionerà già o se prima devi fare le cose che gli altri sviluppatori hanno suggerito, ma il punto è che l'ho fatto funzionare solo dopo aver eliminato il cartella bin, e questo dopo 3 o più ore cercando e provando altre soluzioni. Quindi, forse funzionerà anche per te.


Ho appena avuto lo stesso messaggio di errore.

Ho un progetto separato per l'accesso ai miei dati. L'esecuzione del progetto Web (che faceva riferimento al progetto di dati) localmente funzionava bene. Ma quando ho distribuito il progetto web per azzerare l'assembly: EntityFramework.SqlServer non è stato copiato. Ho appena aggiunto il riferimento al progetto web e ridistribuito, ora funziona.

spero che questo aiuti gli altri


Ho avuto lo stesso problema che ho provato molte volte ma non è stato risolto, ma quando installo il pacchetto EntityFramework.SqlServerCompact ha risolto l'installazione di questo pacchetto da Nuget package Manager.

Install-Package EntityFramework.SqlServerCompact

Ho controllato la finestra Debug Output nel progetto Unit Test. EntityFramework.SqlServer.dll non è stato caricato. Dopo averlo aggiunto alla cartella bin, i test sono stati eseguiti correttamente.


Ho risolto questo copiando manualmente il file EntityFramework.SqlServer.dll nella bin folder dell'applicazione principale.


Ho un problema, perché non aggiungo il riferimento a EntityFramework.sqlServer.dll. Quando sviluppo il programma, funziona. Ma quando pubblico l'app e la installo, si genera un errore.

Ho solo aggiunto riferimento e Build and Publish again.


Ho usato la registrazione basata su codice per il provider. link1 link2

Ho appena creato la classe di configurazione come

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

Il punto chiave è this.SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

e usato in questo modo

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

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

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

In ritardo per la festa, ma le risposte votate in cima mi sembravano tutte come hack.

Tutto ciò che ho fatto è stato rimuovere il seguente dal mio app.config nel progetto di test. Lavorato.

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

L'aggiunta di Entityframework.dll e Entityframework.sqlserver.dll al progetto di riferimento ha risolto il problema.


La mia soluzione era rimuovere il framework entità dal progetto tramite il gestore di nuget e aggiungerlo nuovamente.


Lo stesso problema, ma ho installato EF 6 tramite Nuget. EntityFramework.SqlServer era mancante per un altro eseguibile. Ho semplicemente aggiunto il pacchetto nuget a quel progetto.


Nel mio caso ho risolto il problema installando SQL Server 2012 Developer Edition quando avevo precedentemente installato SQL Server Express 2012 (x64). Sembra che mi abbia fornito la dipendenza mancante.


Non volevo un riferimento a EF nel mio progetto di applicazione (o per copiare manualmente qualcosa), quindi l'ho aggiunto agli eventi Post-build del mio progetto EF:

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

Oltre a tutti i suggerimenti utili qui, se si utilizza EF 6.1.3, assicurarsi che la versione .net del progetto sia 4.5 o successiva.


Quando ho ispezionato il problema, ho notato che la seguente dll mancava nella cartella di output. La soluzione semplice è copiare Entityframework.dll ed Entityframework.sqlserver.dll con l'app.config nella cartella di output se l'applicazione è in modalità di debug. Allo stesso tempo cambia, il parametro opzione di compilazione "Copia nella cartella di output" di app.config per copiare sempre. Questo risolverà il tuo problema.


Stavo lavorando sul tutorial di Contoso University offline e ho riscontrato lo stesso problema quando provavo a creare il mio primo controller usando EF. Ho dovuto usare la console di Gestione pacchetti per caricare EF dalla cache di nuget e creare una stringa di connessione alla mia istanza locale di SQL Server, il mio punto qui è la mia impostazione webConfig per EF potrebbe non essere impostata come tutti là fuori, ma sono stato in grado per risolvere il problema eliminando completamente la sezione "provider" all'interno di "entityFramework"

Roberto


Vedo un problema simile e utilizzo il metodo da questo post: ( http://entityframework.codeplex.com/workitem/1590 ), che risolve il mio problema.

Per aggirare il problema, è possibile fare in modo che l'assembly di test faccia riferimento direttamente all'assembly del provider aggiungendo una riga come questa in qualsiasi punto dell'assembly del test: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;





entity-framework-6