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


420

Sto cercando di eseguire i miei test su TeamCity che è attualmente installato sul mio computer.

System.InvalidOperationException:

Il tipo di provider Entity Framework ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'per il' System.Data.SqlClient'provider ADO.NET 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.Entitynessuno dei miei progetti, come è stato suggerito su codeplex per l'aggiornamento a EF6.

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

Ho provato a impostare CopyLocal su false, poi di nuovo su true .. ma neanche quello sembra funzionare.

Aggiornare

My app.config ha il seguente. Questo provoca alcuni comportamenti 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

1
EntityFramework.SqlServer.dll è distribuito insieme a EntityFramework.dll? In EF6 i provider SqlServer e SqlServerCE non si trovano nello stesso assembly del motore EF come nelle versioni precedenti. Non è necessario aggiungere un riferimento a System.Data.Entity.dll. Il modello del provider in EF6 è cambiato rispetto a EF5 e il provider EF5 non funzionerà. Inoltre, puoi affrontare alcuni problemi delicati (come i tipi geospaziali EF5 trattati come tipi di entità in EF6)
Pawel,

Sì, ho ricontrollato che non vi è alcun riferimento a System.Data.Entity e sono presenti i riferimenti a EntityFramework.dll e EntityFramework.SqlServer.dll. Ancora una volta il progetto e le compilazioni vengono eseguiti in VS. È solo quando eseguo i test su TeamCity che l'errore si ripresenta.
Ashutosh Raina,

Questa è una configurazione corretta. Non ho usato TeamCity ma mi sembra che quando l'app viene distribuita per eseguire i test con TeamCity manca EntityFramework.SqlServer.dll e quindi l'eccezione.
Pawel,

1
vedi la risposta da questo post: stackoverflow.com/questions/21175713/… Ho aggiunto la private volatile Type _dependency...risposta e ha funzionato! Puzza solo che devo aggiungere una classe separata come questa solo per far funzionare EF in TeamCity.
a11smiles

2
Ho disinstallato EntityFramework dai pacchetti nuget e ho reinstallato e si è risolto
abhyudayasrinet

Risposte:


426

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


108
Ho notato anche questo. Se si crea una libreria che utilizza EF, VS inserirà l'EF.dll e l'EF.SqlServer.dll in quella cartella di build. Ma se ora hai un altro programma che utilizza la tua libreria, solo l'EF.dll verrà inserito in questa cartella di build. File EF.SqlServer.dll mancante. Se lo aggiungi manualmente alla cartella build, il programma funziona. Non è una buona soluzione in sé, ma mostra che il problema è la mancanza dell'errore EF.SQLServer.dll.
Eric,

44
Ho aggiunto var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices); Quindi la mia app ha funzionato
Brian,

33
Mi preoccupo sempre quando digito il codice che non fa assolutamente nulla e all'improvviso viene eseguito il mio progetto. O_o
Giordania,

10
Inoltre, a causa dell'ottimizzazione del compilatore, potresti voler fare x.ToString()o eliminerà le typeofs in Release.
Giordania,

15
Trovo fastidioso che EF 6.1 abbia ora bisogno che EF sia installato sulla mia DLL / progetto ASPX, mentre EF 5.0 ne abbia bisogno solo sulla mia DLL / progetto a livello di dati.
PeterX,

274

Ho avuto lo stesso problema nei miei progetti di test: ho installato gli ultimi bit EF6 tramite NuGet e ogni volta che invoco qualcosa legato all'EF ho:

Non è stato possibile caricare il tipo di provider Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' per il provider ADO.NET 'System.Data.SqlClient'. Assicurarsi che l'assembly del provider sia disponibile per l'applicazione in esecuzione. Vedere http://go.microsoft.com/fwlink/?LinkId=260882 per ulteriori informazioni.

Soluzione alternativa: ho inserito questo metodo nel mio progetto di test:

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

Questo metodo non è mai stato chiamato, ma penso che il compilatore rimuoverà tutti gli assembly "non necessari" e senza usare le cose EntityFramework.SqlServer il test fallisce.

Comunque: funziona sulla mia macchina;)

Nota: invece di aggiungere il metodo per testare il progetto, è possibile garantire un riferimento statico a SqlProviderServices dal progetto Modello / entità .


24
Ho finito per fare lo stesso. Vorrei parlare con quella persona che ha reso questa assemblea una dipendenza dall'apertura di una connessione a db. Nel loro universo alternativo tutti i nostri progetti di frontend che hanno file di configurazione con una stringa di connessione dovrebbero fare riferimento a EntityFramework solo per ottenere questo dll per aprire la connessione. In che modo ha senso non capisco.
juhan_h,

3
È un trucco, ma è la soluzione migliore / più semplice che ho trovato per lo scenario in cui non hai creato un pacchetto di distribuzione per il tuo progetto.
Kon

3
Per tutti voi che utilizzate altri suggerimenti come "var x = typeof (SqlProviderServices);". Solo questa soluzione fornita da Robert funziona su macchine di sviluppo e costruzione !!!
Alexander Schmidt,

3
Grazie Robert, è ridicolo dal team EF, ma comunque funziona per me.
Hitesh,

7
Per essere chiari: l'aggiunta del codice sopra alla DbContextclasse risolverà il problema in EF 6.1. In questo modo non è necessario includere il pacchetto Nuget di Entity Framework nel progetto front-end (WebApi, ecc.) E si può lasciare tutto ciò che riguarda EF nel proprio livello dati.
Nick,

106

Nuget configurerà il tuo progetto EF6 in modo che faccia riferimento a EntityFramework.SqlServer.dll. Questo viene distribuito nella cartella di output per il progetto EF6 durante la compilazione, ma non verrà distribuito nella cartella di output per i progetti che fanno riferimento al progetto EF6. Credo che ciò sia dovuto al fatto che Visual Studio è abbastanza "intelligente" da rilevare che nulla nell'assembly utilizza effettivamente la DLL direttamente e quindi non la include. È possibile forzare EntityFramework.SqlServer.dll da distribuire nella cartella di output dei progetti che fanno riferimento al progetto EF6 (unit test, UI ecc.) Aggiungendo codice al progetto EF6 che utilizza EntityFramework.SqlServer.dll. Fare attenzione a non inserire il codice in una classe generata poiché si rischia di perderlo al prossimo rigenerazione. Ho scelto di aggiungere la seguente classe all'assembly, che ha risolto il 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
Ciò ha risolto il problema per me rispetto a MSTest. Mi piace questo metodo perché non richiede che io faccia qualcosa di complicato con l'ereditarietà delle classi nelle mie classi di test. Includi la classe da qualche parte nel gruppo di prova e MAGIC. Grazie!
Kbrimington,

Esattamente, questo è il motivo per cui non sta copiando sqlserver.dll nell'output dei progetti di riferimento. Ciò accade quando si ha un ulteriore livello tra l'esecuzione dell'applicazione e l'assemblaggio del contesto. Grazie, ho risolto il mio problema.
Bharat,

2
Per coloro che non vogliono passare 4 secondi a cercarlo: utilizzando System.Data.Entity.SqlServer;
TTT

Usiamo una classe base comune per i test unitari, tutti i test unitari ereditano da questa classe. L'aggiunta di questo metodo a quella classe significa che tutti i progetti con una classe di test unit che ereditano dalla classe base funzionano correttamente.
MaxJ

3
Piccolo punto, ma probabilmente è meglio aggiungere un commento a questa classe per spiegare perché è necessario.
John Darvill

43

La mia soluzione è stata quella di rimuovere il framework di entità dal progetto tramite il nuget manager e aggiungerlo di nuovo.


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

Questo ha funzionato per me e penso che potrebbe essere la soluzione ottimale
ccoutinho

Soluzione semplice e pulita che funziona. Dovrebbe essere molto più in alto nell'elenco
mode777

29

Ho risolto questo aggiungendo uno stament usando sopra la mia classe DBContext, in questo modo:

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

1
Questa è la soluzione più pulita a questo problema. Grazie.
Alexandru Dicu,

Questa soluzione funziona e sembra pulita. Domanda: non perdiamo l'identificativo di linea che la classe DBContext viene aggiornata? cioè usando la generazione della classe edmx?
NoloMokgosi

Non riesco a credere che questo fosse necessario e in qualche modo non sia stato corretto da Microsoft, ma ha funzionato per me. Grazie per una soluzione semplice.
Tsar Bomba,

Questa soluzione è funzionalmente uguale a MissingDllHack . Può sembrare più pulito, ma introduce il codice di soluzione alternativa nella classe di contesto. Questo codice verrà inoltre contrassegnato per la rimozione da strumenti come ReSharper e potrebbe essere facilmente perso nel tempo. Una buona soluzione, ma preferisco mantenere la soluzione alternativa al contesto in modo da non generare avvisi di codice.
Timothy Schoonover,

20

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 l'ho usato in questo modo

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

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

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

Ho due progetti in una soluzione. La prima è la libreria di classi con l'assemblaggio di framework di entità e la classe DbContext e i file tt. Il secondo progetto è costituito dai moduli di Windows che dovrebbero ottenere dati utilizzando l'ef-project. @Nash: potresti spiegare dove (in quale progetto) hai inserito la tua classe DbContextConfiguration? Grazie
surfmuggle

Come accennato in precedenza, sembra che ulteriori riferimenti siano un modo per risolvere questo problema (vedi commento da Eric). Ho usato la console nuget e ho lanciato questo comando:Get-Project MyWinformsProject | Install-Package EntityFramework che l'ha risolto per me. Vorrei ancora capire meglio il motivo.
surfmuggle

DbContextConfiguration sembrava essere già presente (rispetto al 2013), l'aggiunta della linea DbConfiguraton sopra la mia classe MyDbContext non mi ha risolto il problema.
Anders Lindén,

Non hai bisogno di un classe DbConfiguration . Inserire il seguente codice in fase di avvio app (prima di EF è utilizzato): DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Rosberg Linhares,

14

L'ho risolto con [DeploymentItem] sulla mia classe di inizializzazione dell'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

In ritardo alla festa, ma le risposte più votate mi sono sembrate degli hack.

Tutto ciò che ho fatto è stato rimuovere quanto segue dalla mia 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>

La vera soluzione!
Ben F,

8

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

Aggiungo solo riferimento e Build and Publish di nuovo.

Riferimenti


Ho fatto questo e ha funzionato. Fondamentalmente il progetto mostrerà un avviso quando i componenti alle librerie non sono stati indirizzati correttamente.
kbvishnu,

5

Ho risolto questo problema copiando manualmente il EntityFramework.SqlServer.dllfile bin foldernell'applicazione principale.


4

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

L'ho archiviato con Microsoft qui (questo era prima che ottenessi 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. Tuttavia, sono ancora curioso di sapere perché nessuno dei due motori di esecuzione VS Test ha avuto un modo grazioso di dirmi cosa non stava succedendo al Team City.

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

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


4

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 di test: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;


3

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


2
Ho impostato "Copia locale" vero solo per "EntityFramework.SqlServer". Ora funziona.
Alezis,

3

È sufficiente fare riferimento o navigare nel browser EF dll - EntityFramework.SqlServer.dll


Questo è quello che ho fatto. Ho copiato il riferimento a "EntityFramework.SqlServer" dalla mia libreria nel progetto "in esecuzione". Ha funzionato!
Håkon K. Olafsen,

3

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

Install-Package EntityFramework.SqlServerCompact

3

Ho creato un file di "avvio" statico e aggiunto il codice per forzare la copia della DLL nella cartella bin in esso come un modo per separare questa "configurazione".


[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
Grazie! Questo è stato di grande aiuto.
Addison Schuhardt,

1
Sono contento che tu abbia trovato utile la mia risposta @AddisonSchuhardt :)
hatsrumandcode

2

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

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

2

Questo succede solo all'interno dei miei progetti di test di carico / unità. Frustrante, ho avuto un brutto colpo in un progetto che gestivo da 2 anni. Deve essere stato un certo ordine di test in esecuzione che rompe le cose. Immagino che una volta rimosso quel fi sia sparito.

Ho scoperto che la semplice dichiarazione di una variabile che utilizza il valore corretto risolve il problema ... Non ho mai nemmeno chiamato il metodo. Basta definirlo. Strano ma funziona.

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

2

Dopo aver provato tutte le altre soluzioni suggerite e non aver fatto funzionare il mio progetto, ho finalmente trovato un piccolo commento in questa pagina :

L'eliminazione della cartella BIN l'ha fatto per me

E ha funzionato anche per me.


1
Stavo fondendo 2 filiali: il mio progetto non aveva modifiche relative a EF, ma i miei unittests hanno iniziato a fallire senza motivo. L'eliminazione della cartella BIN li ha fatti funzionare di nuovo.
Arno Peters,

@ Zeek2 questo errore è complicato. Ci sono molti suggerimenti diversi per risolvere questo problema nella pagina che ho citato. Questa è solo una delle tante soluzioni possibili. Continua a cercare fino a trovare la soluzione che si applicherà al tuo problema specifico e buona fortuna.
Ulisse Alves,

1

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


1

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.


1

Ho anche avuto un problema simile

Il mio problema è stato risolto nel modo seguente:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


1

Ho avuto lo stesso problema con l'istanza di DBContextoggetti da un progetto di unit test. Ho controllato i pacchetti del mio progetto unit test e l'ho capitoEntityFramework pacchetto non fosse installato, l'ho installato da Nuget e il problema è stato risolto (penso che sia un bug EF).

buona programmazione


0

Ho appena ricevuto 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 dati) funzionava localmente bene. Ma quando ho distribuito il progetto Web per azzerare l'assemblaggio: EntityFramework.SqlServer non è stato copiato. Ho appena aggiunto il riferimento al progetto Web e ridistribuito, ora funziona.

spero che questo aiuti gli altri


0

Stavo lavorando al tutorial della Contoso University offline e ho riscontrato lo stesso problema durante il tentativo di creare il mio primo controller utilizzando EF. Ho dovuto utilizzare la console di gestione dei pacchetti per caricare EF dalla cache del nuget e ho creato una stringa di connessione alla mia istanza locale di SQL Server, il mio punto qui è che l'impostazione WebConfig per EF potrebbe non essere configurata come tutti voi là fuori ma sono stato in grado per risolvere il mio problema eliminando completamente la sezione "provider" in "entityFramework"

Roberto


0

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

Il problema dovrebbe essere risolto.


0

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


0

rimuovere il framework di entità dal progetto tramite nuget, quindi aggiungerlo nuovamente.


0

Nel mio caso dllnon è stato copiato anche se ho aggiunto un riferimento ad esso. Questo perché EntityFramework.SqlServer.dllnon viene copiato nel tuo progetto. Aggiungi quella dll e si spera che funzioni. Puoi trovarla dal progetto in cui hai aggiunto il modello di dati.


0

Oltre a tutti i suggerimenti utili qui, se stai usando EF 6.1.3, assicurati che la versione .net del tuo progetto sia 4.5 o più.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.