Nessun provider di Entity Framework trovato per il provider ADO.NET con nome invariante "System.Data.SqlClient"


543

Dopo aver scaricato EF6 con nuget e aver tentato di eseguire il mio progetto, restituisce il seguente errore:

Nessun provider di Entity Framework trovato per il provider ADO.NET con nome invariante 'System.Data.SqlClient'. Assicurarsi che il provider sia registrato nella sezione "entityFramework" del file di configurazione dell'applicazione. Vedere http://go.microsoft.com/fwlink/?LinkId=260882 per ulteriori informazioni.

inserisci qui la descrizione dell'immagine


Uso EF5 senza providerse providerroba, quindi considera di rimuoverlo?
ta.speot.is

1
metti una copia della stringa di connessione qui
pylover

La stringa di connessione è nell'immagine (App.confing), tra l'altro è molto semplice, chiamo il costruttore public BaseStorage(): base ("RaptorDB") {}, BaseStorage () eredita da DbContext in EF5 tutto ha funzionato perfettamente, non già in EF6.
Fernando Vellozo,

10
Il problema verrà risolto installando EF6, il secondo progetto (Console), grazie a tutti coloro che hanno contribuito in qualche modo!
Fernando Vellozo,

3
Per me, questo sembra essere stato causato dal fatto che Visual Studio non si è reso conto che l'assembly EntityFramework.SqlServer era effettivamente utilizzato dal progetto di base. Se fai qualcosa come la risposta di @ Carra , non devi aggiungere EF a ogni progetto che fa riferimento al tuo progetto di base - molto più pulito.
tehDorf

Risposte:


608

Ho appena avuto lo stesso problema e sembra EntityFramework anche se installato da NuGet Package Manager non è stato installato correttamente nel progetto.

Sono riuscito a risolverlo eseguendo il seguente comando sulla console di Package Manager :

PM> Install-Package EntityFramework

34
PMC ha scritto che "EntityFramework 6.0.1" è già installato, ma l'ha aggiunto alla mia app della console (che non utilizza EF), ma ha funzionato anche per me. Rimuovo EF dai riferimenti dell'app della console, restituisce l'errore, non capisco: la mia app della console sta usando un progetto repository (che utilizza EF) Grazie per l'aiuto!
Prokurors,

33
Non dimenticare di aggiungere -ProjectName <ProjectName> alla riga di comando se hai diversi progetti nella tua soluzione ... !!!
Eugenio Miró,

1
Utilizzando l' -Preopzione dillo a nuget per installare i pacchetti pre-release. Non consiglio di usarlo. Ho un errore simile ma la soluzione era installare EntityFramework nel progetto host. L'ho installato in una libreria di classi ma non nel progetto principale (web / console / o altro),
Davide Icardi,

10
Lo stesso problema qui. Avevo un progetto che non aveva un riferimento a EF ma la dll EF era nella cartella Debug. Esecuzione di questo comando su questo progetto aggiuntoEntityFramework.SqlServer.dll alla cartella Debug - problema risolto.
Qujck,

4
Nella mia situazione questo errore non si è presentato fino a quando non ho distribuito il progetto sul nostro server di test. In effetti era EntityFramework.SqlServer.dll che mancava e l'installazione di EF tramite gestore pacchetti funzionava. Ha appena aggiunto i due riferimenti rilevanti al progetto e quindi ha aggiunto le impostazioni entityFramework a web.config. Immagino che l'IIS locale sia riuscito a procurarsi l'assemblaggio localmente, ma l'IIS completo sul server Web non è riuscito a causa delle autorizzazioni?
Atters,

384

Hai aggiunto EF a un progetto di biblioteca di classe. È inoltre necessario aggiungerlo al progetto a cui fa riferimento (l'app della console, il sito Web o qualsiasi altra cosa).


248
Questa è una risposta assolutamente ridicola. Perché mai dovrei farlo? E sai cos'è ancora più ridicolo? Funziona.
Robert,

19
Vedi la mia risposta di seguito, non è necessario installare EF nell'applicazione console.
Francisco Goldenstein,

7
La tua risposta è corretta. Aggiungi solo EntityFramework.SqlServer.dll di riferimento al progetto frontend che utilizza una libreria con EF, risolvi il problema. Quindi non usare questo EF (solo la DLL)
harveyt

31
Non è necessario aggiungere un riferimento a EF nell'app console / web. Devi solo assicurarti che EntityFramework.SqlServer.dllvenga copiato nella directory bin. L'aggiunta di un riferimento forte potrebbe compromettere la tua architettura (se hai creato più livelli, il tuo gruppo di esecuzione di livello superiore non dovrebbe nemmeno conoscere EF). Invece, è possibile assicurarsi che il provider SQL Server sia copiato. Si veda ad esempio stackoverflow.com/a/19130718/870604
ken2k

3
Ho il sospetto che EntityFramework.SqlServer.dll non venga rilevato come dipendenza perché Entity Framework lo carica in modo dinamico. Come dovrebbe il tuo progetto sapere di copiarlo sul provider SQL quando l'unico riferimento è nel file di configurazione?
Joel McBeth,

209

Non è necessario installare Entity Framework nell'applicazione Console, è sufficiente aggiungere un riferimento all'assembly EntityFramework.SqlServer.dll. È possibile copiare questo assembly dal progetto Libreria di classi che utilizza Entity Framework in una cartella LIB e aggiungere un riferimento ad esso.

In sintesi:

  • Applicazione Libreria di classi:
    • Installa Entity Framework
    • Scrivi il codice del livello dati
    • Il file app.config ha tutta la configurazione relativa a Entity Framework ad eccezione della stringa di connessione.
  • Creare una console, un'applicazione Web o desktop:
    • Aggiungi un riferimento al primo progetto.
    • Aggiungi un riferimento a EntityFramework.SqlServer.dll.
    • app.config / web.config ha la stringa di connessione (ricorda che il nome della voce di configurazione deve essere uguale al nome della classe DbContext.

Spero possa essere d'aiuto.


18
Risposta corretta. Non è necessario installare EF. EntityFramework.SqlServer.dll.
Tom Stickel,

15
Devo essere d'accordo Questa è completamente la risposta corretta. Fare riferimento a una dll che è 1/2 mb o estrarre il progetto EF nuget che è> 5,5 mb. Riduce anche un po 'il valore dell'architettura di più livelli. Povero spettacolo dalla SM davvero: ho 4 livelli e il mio livello superiore non dovrebbe davvero avere motivo di sapere qualcosa su EF
72GM

18
Comunque ridicolo comunque. ad es. Perché un front-end avrebbe bisogno di un riferimento a SqlServer? Il front-end non potrebbe importare di meno, nel mio caso. Ma funziona +1
Mike de Klerk,

2
Questo è stato utile. Molte grazie.
peter_the_oak,

1
Questo non renderà difficile aggiornare le versioni di EntityFramework? Dovresti ricordarti di andare ad aggiornare il riferimento alla DLL
schiaccia il

114

È inoltre possibile visualizzare questo messaggio se si dimentica di includere "EntityFramework.SqlServer.dll".

Sembra essere un file appena aggiunto in EF6. Inizialmente non l'avevo incluso nel mio modulo di unione e mi sono imbattuto nel problema elencato qui.


7
Ho riscontrato questo problema quando in precedenza avevo un progetto (a) con riferimento a un progetto (b) che aveva un riferimento a EF. Dopo aver pulito ed eliminato la cartella bin del progetto (a), quindi ricostruita, è stato rilevato il riferimento EF, ma non EF.SqlServer.dll. La copia di questo è stata eseguita manualmente per me
dan richardson il

2
@dan richardson grazie per aver menzionato "elimina la cartella bin".
Rajshekar Reddy,

Ho riscontrato l'errore durante il tentativo di eseguire uno script LINQPad dopo un aggiornamento EF6. Anche facendo riferimento a EntityFramework.SqlServer.dll in LINQPad non è stato risolto FINO A quando ho ricostruito la mia soluzione in VS2013. Il nuovo riferimento si è quindi risolto correttamente in LINQPad e il mio script è stato eseguito!
Chris,

Nel mio caso, stavo bene all'ambiente di sviluppo, ma quando ho pubblicato appare il problema di riferimento. Dopo aver confrontato l'elenco delle librerie in sviluppo con la cartella bin nel server ho notato l'assenza di EntityFramework.SqlServer.dll, ho solo per caricarlo e aggiornare l'app e voilà riparato.
Henry Rodriguez,

Questo è stato il problema per me, grazie! Vedi la soluzione pulita di @Anders per evitare problemi dimenticando di includere la DLL in ogni progetto richiesto.
SharpC

54

Invece di aggiungere EntityFramework.SqlServer al progetto host, puoi assicurarti un riferimento statico ad esso dal tuo progetto Modello / entità in questo modo

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

Ciò renderà il processo di compilazione includere l'assemblaggio con il progetto host.

Maggiori informazioni sul mio blog http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/


5
Penso che questa sia una bella soluzione pulita in cui non dobbiamo includere riferimenti a DLL relative alla persistenza in progetti che dovrebbero essere indipendenti dalla persistenza.
JTech,

3
Concordato, e si applica a qualsiasi biblioteca con dipendenze implicite, non solo persistenza
Anders,

3
Quando si ha una dipendenza esplicita da un tipo in un assieme, questo verrà copiato dal processo di compilazione. Tuttavia qui non si ha una dipendenza esplicita e il processo di compilazione non riuscirà a copiare l'assembly nella cartella di compilazione. Il mio codice si assicura solo che esista un riferimento esplicito a qualsiasi tipo in detto assembly.
Anders,

2
Senza di esso non vi è alcuna dipendenza esplicita dall'assembly dal codice e non verrà copiato nell'output
Anders

2
È brillante.
Kris

48

Quando si installa Entity Framework da 6 a Nuget. EntityFramework.SqlServer a volte manca un altro eseguibile. Aggiungi semplicemente il Nugetpacchetto a quel progetto.

A volte sopra non funziona per il progetto di test

Per risolvere questo problema in Test Project basta inserire questo metodo in Test Project:

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

Questo metodo non è mai stato chiamato, ma come le mie osservazioni, il compilatore rimuoverà tutti gli assembly "non necessari" e senza usare le EntityFramework.SqlServercose il test fallisce.


2
Bene, questo non è carino ma ha risolto il problema che stavo avendo nel mio progetto di test. Nessuna delle altre soluzioni ha funzionato.
Honorable Chow

Nel mio caso è stato sufficiente aggiungere Entity Framework anche al mio progetto di test in "Gestisci i pacchetti Nuget per la soluzione"
Juha Palomäki,

in realtà è necessario inserire in qualsiasi progetto (non solo test) per assicurarsi che System.Data.Entity.SqlServer sia incluso in "set di risultati lib" dopo la compilazione (nota: Unity o altri strumenti IoC potrebbero cambiare questa regola e tu è necessario chiamare questo codice dal progetto di test).
Roman Pokrovskij,

Questa è in realtà la soluzione migliore, perché non è necessario spruzzare riferimenti di framework di entità ovunque nel progetto.
Daniel Lobo,

Questo mi ha indicato la giusta direzione. La EntityFramework.SqlServersi aggiunge alla libreria di classi, ma se non utilizzato, non sarà posto all'interno della cartella di output della vostra applicazione. Ho risolto il problema aggiungendo un ExecutionStrategy, che dovevo ancora fare, quindi l'aggiunta di una riga come SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());all'interno di una DbConfigurationclasse ha risolto il problema.
Jan_V,

24

Aggiungi questa funzione

private void FixEfProviderServicesProblem()

nella classe di contesto del database nella classe di libreria e la DLL EntityFramework.SqlServer.dll mancante verrà copiata nei punti corretti.

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

.


mi dispiace provare a revocarlo ... poiché non pensavo che avrebbe funzionato ... e funziona! ... dice che non posso cambiare il mio voto, a meno che la risposta non venga modificata, perché è troppo lunga e da allora bloccato ...
Seabizkit

Questo ha funzionato anche per me. Abbiamo un progetto di libreria che utilizza EF 6 e un'applicazione console che utilizza la libreria. Stavamo ottenendo la stessa eccezione dell'OP. Non desideriamo inserire la configurazione specifica di EntityFramework nel file di configurazione dell'applicazione, quindi questo metodo ha funzionato per noi. Grazie
Rob,

1
Dove chiami FixEfProviderServicesProblemho provato nel costruttore, senza fortuna.
Francis Ducharme,

1
Non lo chiamo mai, non è necessario. Il fatto che sia lì fa pensare che .net sia necessario e include EntityFramwork come dipendenza.
Johannes,

Probabilmente da stackoverflow.com/a/19130718/1467396 ? Ma +1, comunque per la chiarezza su come / dove usarlo.
David

20

Nessuno di questi ha funzionato per me. Ho trovato la soluzione in un'altra domanda di StackOverflow . Lo aggiungerò qui per un facile riferimento:

Devi fare un riferimento, quindi verrà copiato nel percorso dell'applicazione den. Perché in seguito verrà fatto riferimento in runtime. Quindi non è necessario copiare alcun file.

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

2
Questo! Non è necessario aggiungere un riferimento ad altri progetti che potrebbero fare riferimento a questo assembly.
tehDorf

8

Ho riscontrato lo stesso errore durante l'utilizzo di Entity Framework 6 con SQL Server Compact 4.0. L'articolo su MSDN per Provider Framework Entity per EF6 è stato utile. L'esecuzione dei rispettivi comandi del provider come pacchetti nuget nella Console Gestione pacchetti potrebbe risolvere il problema, poiché anche i pacchetti NuGet aggiungeranno automaticamente le registrazioni al file di configurazione. Ho corso PM> Install-Package EntityFramework.SqlServerCompactper risolvere il problema.


2
Sono davvero sorpreso che nessuno abbia votato per questo finora! Il messaggio di errore indica chiaramente: la ragione dell'errore è che dopo l'aggiornamento EF, non esiste davvero alcuna definizione del provider per SQL Compact nel file web.config dell'applicazione! L'aggiunta del pacchetto menzionato risolve il file web.config e verrà definito il provider.
Csaba Toth,

1
semplicemente salvavita. Dovrebbe essere contrassegnato come risposta in quanto fornisce chiaramente una soluzione al problema
ZafarYousafi

7

Ho affrontato questo problema oggi quando lavoravo con una serie di servizi Web, ciascuno in progetti diversi, e un progetto separato contenente test di integrazione per alcuni di questi servizi.

Sto usando questa configurazione da un po 'di tempo con EF5, senza la necessità di includere riferimenti a EF dal progetto di test di integrazione.

Ora, dopo l'aggiornamento a EF6, sembra che debba includere un riferimento a EF6 anche nel progetto di test di integrazione, anche se non viene utilizzato lì (praticamente come indicato sopra dall'utente 3004275 ).

Indicazioni che stai riscontrando lo stesso problema:

  • Le chiamate direttamente a EF (connessione a un DB, acquisizione di dati, ecc.) Funzionano correttamente, a condizione che vengano avviate da un progetto con riferimenti a EF6.
  • Chiamate al servizio tramite un'interfaccia di servizio pubblicata funzionano correttamente; cioè non ci sono riferimenti mancanti "internamente" nel servizio.
  • Chiamate direttamente a metodi pubblici nel progetto di servizio, da un progetto esterno al servizio, causeranno questo errore, anche se EF non viene utilizzato nel progetto stesso; solo internamente nel progetto chiamato

Il terzo punto è ciò che mi ha sconcertato per un po ', e non sono ancora sicuro del perché sia ​​necessario. L'aggiunta di un riferimento a EF6 nel mio progetto Test di integrazione lo ha risolto in ogni caso ...


7

Quando si verifica l'errore nei progetti di test, la soluzione più bella è decorare la classe di test con:

[DeploymentItem("EntityFramework.SqlServer.dll")]

È davvero piuttosto, ma genera più lavoro ed è più facile da dimenticare. Con il trucco "riferimento forzato", devi solo farlo sui progetti che devono davvero usare EF.
Charles Roberto Canato,

7

Il progetto di avvio che fa riferimento al progetto in cui viene utilizzato Entity Framework richiede i seguenti due assembly nella relativa cartella bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

L'aggiunta di a <section>al <configSections>file .config sul progetto di avvio rende disponibile il primo assembly in quella directory bin. Puoi copiarlo dal file .config del tuo progetto 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>

Per rendere disponibile il secondo .dll nella cartella bin, anche se non pratico, è possibile creare una copia manuale dalla cartella bin del progetto Entity Framework. Un'alternativa migliore è quella di aggiungere al progetto Post-Build Events del Entity Framework le seguenti righe, che automatizzeranno il processo:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\

2
Grazie, ho Entity framework in un livello dati, quindi è isolato ma è un peccato che Microsoft non ci consenta di isolare veramente il livello dati e ci fa inquinare l'UX con una tecnologia di database. Speravo di non doverlo fare.
Matt

4

Ho appena incontrato questo problema oggi. Ho una libreria di classi di repository di dati con il pacchetto NuGet EF63 e l'applicazione console per i test, che fanno riferimento solo al progetto della libreria di classi. Ho creato un comando post-build molto semplice, che copia EntityFramework.SqlServer.dll dalla cartella Bin \ Debug della libreria di classi nella cartella Bin \ Debug dell'applicazione console e il problema è stato risolto. Non dimenticare di aggiungere la sezione entityFramework al file .config dell'applicazione console.


4

Aggiungi sotto al tuo 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>

Devi anche registrarlo su <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove il

Questo è ciò che fa "IInstall-Package EntityFramework". Ciò non è realmente necessario perché EntityFramework per impostazione predefinita tenta di caricare EntityFramework.SqlServer.dll per il nome invariante SqlClient. Questo metodo può essere utilizzato per sostituire il provider.
user1295211

3

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


3

È necessario forzare un riferimento statico all'assembly EntityFramework.SqlServer.dll , ma invece di inserire un codice fittizio, è possibile farlo in un modo più bello:

  1. Se hai già una classe DbConfiguration :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Se non si dispone di una classe DbConfiguration , è necessario inserire il seguente codice all'avvio dell'app (prima di utilizzare EF):

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

2

Ho appena reinstallato Entity Framework usando Nuget. E segui le istruzioni scritte sul link seguente: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

Penso che il problema verrà risolto.


Una spiegazione sarebbe gradita! Perché è necessario reinstallarlo e così via
Rizier123

1
Perché per qualche motivo sconosciuto le modifiche non avranno effetto e quindi ho reinstallato EntityFramework 6.1.1 e successivamente ha effetto.
Kuntal Ghosh,

2

Espandere il file YourModel.edmx e aprire la classe YourModel.Context.cs in YourModel.Context.tt.

Ho aggiunto la seguente riga nella sezione utilizzo e l'errore è stato corretto per me.

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

Potrebbe essere necessario aggiungere questa riga al file ogni volta che il file viene generato automaticamente.


2

Ho avuto anche un problema simile. Il mio problema è stato risolto nel modo seguente:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


2

sembra che nessuno abbia menzionato prima il controllo se System.Data.SqlClient è installato nel sistema e se viene fatto riferimento ad esso.

ho risolto il mio problema installando System.Data.SqlClient e aggiungendo un nuovo provider in app.Config

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>

1

Inoltre, assicurati che il tuo progetto di avvio sia il progetto che contiene il tuo dbcontext (o l'app.config pertinente). Il mio stava cercando di avviare un progetto di sito Web che non aveva tutte le impostazioni di configurazione necessarie.


1

Ho provato quasi tutto quanto sopra e niente ha funzionato.

Solo quando ho impostato le DLL di riferimento nel Progetto predefinito EntityFrameworke le EntityFramework.SqlServerproprietà Copy Localsu Trueha iniziato a funzionare!


1

tutti ho bisogno della vostra attenzione che due dll EntityFramework.dll e EntityFramework.SqlServer.dll sono libreria di layer DataAccess E non è logico usarli in vista o qualsiasi altro layer.it risolve il problema ma non è logico.

modo logico è che l'attributo enitiess li rimuova e li sostituisca con API Fluent.questa è la vera soluzione


1

Avevo un'applicazione console e una libreria di classi. Nella libreria di classi ho creato Entity Data Model (fare clic con il pulsante destro del mouse su Libreria di classi> Aggiungi> Nuovo elemento> Dati> ADO.NET Entity Data Model 6.0) e inserire il riferimento all'interno dell'applicazione console. Quindi, hai un'applicazione console che fa riferimento alla libreria di classi e all'interno della libreria di classi hai il modello EF. Ho avuto lo stesso errore quando ho cercato di ottenere alcuni record dalla tabella.

Ho risolto questo problema seguendo questi passaggi:

  1. Fare clic con il tasto destro del mouse sulla soluzione e selezionare l'opzione 'Gestisci pacchetti NuGet per soluzione' e verrà visualizzata la finestra del gestore pacchetti NuGet.
  2. Vai all'opzione "Gestisci" in "Pacchetti installati" SUGGERIMENTO: Entity Framework viene aggiunto alla Libreria di classi, quindi EntityFramework in "Pacchetti installati" e vedrai l'opzione "Gestisci"
  3. Fare clic sull'opzione 'Gestisci' e selezionare per installare il pacchetto nel progetto che ha riferimento alla libreria di classi che contiene il modello EF (nel mio caso ho impostato la casella di controllo per installare il pacchetto sull'app console che aveva riferimento alla libreria di classi che aveva il modello EF all'interno)

Questo è tutto ciò che dovevo fare e tutto ha funzionato perfettamente.

Spero abbia aiutato.


1

Ho lo stesso errore È strano che accada solo ogni volta che ho usato il mio dbContext per eseguire query su uno dei miei modelli o ottenere il suo elenco come:

var results = _dbContext.MyModel.ToList();

Abbiamo provato a reinstallare Entity Framework, facendo riferimento in modo corretto ma senza risultati.

Fortunatamente, abbiamo provato a controllare le ALLsoluzioni di Nuget , quindi aggiornare tutto o accertarcieverything fosse la stessa versione perché abbiamo notato che i due progetti hanno versioni EF diverse sul progetto Web. E funziona L'errore è sparito.

Ecco lo screenshot su come gestire Nuget per tutte le soluzioni:

inserisci qui la descrizione dell'immagine


1

Manca un riferimento a EntityFramework.SqlServer.dll. Per i progetti EntityFramework che utilizzano SQL Server, i due file che è necessario fare riferimento sono EntityFramework.SqlServer.dll e EntityFramework.dll


0

Ho avuto un problema correlato durante la migrazione da un db CE a SQL Server in Azure. Ho appena perso 4 ore a cercare di risolvere questo problema. Spero che questo possa salvare a qualcuno un destino simile. Per me, avevo un riferimento a SqlCE nel mio file packages.config. La sua rimozione ha risolto il mio intero problema e mi ha permesso di utilizzare le migrazioni. Yay Microsoft per un'altra tecnologia con problemi di configurazione e configurazione inutilmente complessi.


0

Ho avuto lo stesso problema, ho appena copiato il file Config app dal progetto che conteneva DBContext nel mio progetto di test


0

Ho avuto l'eccezione identica generata. Ho incluso

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

e tutto torna a funzionare di nuovo ..


0

Come messaggio mostra che dobbiamo aggiungere il provider System.Data.SqlClient ecco perché dobbiamo installare un pacchetto nuget di EntityFramework che ha due dll ma se stiamo sviluppando solo un'applicazione console, dobbiamo solo aggiungere un riferimento a EntityFramework.SqlServer.dll

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.