Eccezione EF 4.1 "Il provider non ha restituito una stringa ProviderManifestToken"


88

Sto cercando di replicare un esempio trovato su MSDN. Sto usando ASP.NET e EF 4.1 (CTP?). Ho usato NuGet per installare il pacchetto EntityFramework.

Ricevo questo errore: The provider did not return a ProviderManifestToken string... e il database non viene mai creato.

Ecco la mia stringa di connessione:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

Ecco il mio codice:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

Ecco il mio contesto:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

Questo è un sistema SQL 2008 completamente patchato, con VS 2010 SP1.


Sembrerebbe che dopo aver aggiunto [Chiave] al Modello, abbia superato quel problema. Ho ancora un altro problema, ma questo potrebbe averlo risolto.
bugnuker

Inoltre, potrebbe essere che ho aggiunto "Sicurezza integrata = true" alla mia stringa di connessione ...
bugnuker

Ho la stessa eccezione quando lavoro conSqlServerCe.Entity.dll
Nano Taboada

2
Nell'interesse di cose che possono evocare questa eccezione, passo 20 minuti a fissare oltre il refuso nel nome della stringa di connessione che deve corrispondere al nome del contesto.
JustSteve

Risposte:


184

Ho ricevuto questo errore e ho provato alcuni dei suggerimenti precedenti. Quindi ho controllato l'eccezione interna e ho notato che stavo ottenendo un semplice errore di accesso SQL per l'utente. Solo qualcos'altro da controllare.


Nel mio caso la password del server sql era scaduta
mklein

3
Grazie per avermi indicato la giusta direzione. Il mio servizio SQL Express non è stato avviato - duh!
camainc

Buona vecchia eccezione interna ... avevo sbagliato il nome del mio DB quando ho indicato EF a una nuova posizione di backup ... cosa divertente, ho controllato l'InnerEx e il tuo commento mi ha fatto tornare indietro e rileggerlo ... complimenti!
Andy Danger Gagne

Stava usando la sicurezza integrata, IIS AppPool non aveva i diritti necessari.
Vincent Vancalbergh,

+1 - (Il mio ip di casa è cambiato) Error Msg: Impossibile aprire il server "SERVERNAME" richiesto dal login. Il client con indirizzo IP "MY_OLD_IP" non è autorizzato ad accedere al server. Per abilitare l'accesso, utilizzare il portale di SQL Azure o eseguire sp_set_firewall_rule sul database master per creare una regola firewall per questo indirizzo IP o intervallo di indirizzi. Potrebbero essere necessari fino a cinque minuti prima che questa modifica abbia effetto. \ R \ nAccesso non riuscito per l'utente "MYADMINACCT". \ R \ nQuesta sessione è stata assegnata all'ID di traccia "GUID". Fornisci questo ID di tracciamento all'assistenza clienti quando hai bisogno di assistenza. "}
Dylan Hayes

8

Ciò può accadere a volte quando si inserisce la stringa di connessione nell'app.config del progetto sbagliato in Visual Studio.

Ad esempio, ho riscontrato questo problema nel progetto EF 4.1 (la versione rilasciata) + progetto WCF Data Service e ho notato che non avevo una stringa di connessione specificata nel progetto Data Services, dove veniva utilizzata.


Questa era la mia soluzione. Ho dovuto inserire la stringa di connessione corretta nel progetto di avvio.
MickJuice

5

Ho riscontrato lo stesso errore e in realtà è stato un errore di accesso per il server specificato. Ho rimosso l'attributo "Protezione integrata" dalla stringa di connessione di configurazione e ha funzionato.


Questo ha funzionato per me. Chiunque abbia questo problema dovrebbe provarlo se le altre soluzioni non funzionano.
Justin

Questo errore si è verificato quando il servizio SQL Express è stato disattivato sulla mia macchina.
John M

4

Ho avuto lo stesso problema e aggiungo il codice seguente subito dopo l'istanza del mio contesto (onload per esempio)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

Ho avuto un problema simile con l'app MvcMusicStore. Ho cambiato una riga nel Web.config da "Instance = true" a "Instance = false". A volte funziona senza questo tweak, ma non so cosa causa la differenza. Leggere questo http://msdn.microsoft.com/en-us/library/ms254504.aspx non è stato d'aiuto.


Incredibile ... questa era la soluzione giusta per me. Non ho idea del perché.
Kees C. Bakker

2

Per qualche motivo di autorizzazione, EF non può creare una connessione al database. Avevo affrontato lo stesso problema tutto un giorno. Alla fine ho provato la seguente soluzione e ha funzionato: a / Apri IIS (sto usando IIS 7) b / Apri le impostazioni avanzate di appool che il sito web stava usando (Es: DefaultAppPool) c / Guarda il gruppo Process Model, cambia il valore Identity a "Localsystem"

Spero che funzioni con te.


2

Stavo solo avendo lo stesso problema ...
la soluzione che ha funzionato per me era:
eseguire lo strumento di configurazione della rete client (digitare cliconfg in Esegui)
e assicurarsi che TCP / IP sia abilitato ..


2

Alla fine l'ho risolto - dopo un leggero inseguimento di oche selvatiche pensando che fosse dovuto ai permessi.

Rivelazione: USA SQL PROFILER

(Nota: di recente ho effettuato il downgrade da EF6 a EF5)

Utilizzando SQL Profiler ho trovato rapidamente l'ultimo SQL eseguito prima dell'errore segnalato:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

Be ', guarda quello - qualcosa a che fare con le migrazioni. Sta cercando nella __MigrationHistorytabella, che non avevo nemmeno realizzato di aver creato (avevo già cancellato le migrazioni nel mio CSPROJ) e l'ho cancellato.

Quindi tiro su le righe per quella tabella e vedo che è legata a una versione specifica del prodotto (v6).

inserisci qui la descrizione dell'immagine

In realtà ho effettuato il downgrade da EF6 (che non avevo intenzione di installare in primo luogo) a EF5 (che è più compatibile con lo scaffolding) e quello quando sono iniziati i problemi.

La mia ipotesi è che la Model (<Binary data>)colonna non sia compatibile con le versioni precedenti, da qui l' The provider did not return a ProviderManifest instanceerrore poiché non è stata in grado di decodificarla.

Non avevo nulla da perdere e ho semplicemente cancellato completamente questo tavolo, sono corso Update-Database -Verbosee poi sono tornato attivo e funzionante.

Se ti trovi in ​​un ambiente avanzato o già in produzione, cancellare questa tabella potrebbe non essere la soluzione, ma in questo modo mi ha permesso di tornare subito al lavoro.


Ho finito per eliminare completamente la tabella __MigrationsHistory e riadattarla con Add-Migratione Update-Database -Verbose -Force. ecco un riferimento al comando coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

il punto importante è che questo non è solo un errore di autorizzazione
Simon_Weaver

1

Utilizzando Visual Studio 11 Beta con EF4.1 e ASP.NET MVC, mi sono quasi strappato i capelli finché non ho trovato

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

Per risolvere il mio problema, sono entrato in Application_Start e ho cambiato

Database.DefaultConnectionFactory = new SqlConnectionFactory ("Data Source = (localdb) \ v11.0; Integrated Security = True; MultipleActiveResultSets = True");

per

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "Data Source = (localdb) \ v11.0; Integrated Security = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");è stato aggiunto al mio Mainmetodo, ora funziona a meraviglia! Grazie mille.
rotgers

1

Questo errore è presente solo mentre il file .edmx è aperto e scompare non appena il file viene chiuso di nuovo.

Questa citazione di CodePlex , ha funzionato con me (visual studio 2013 / MVC 5)


Ha lavorato anche con me. Ho provato a chiudere e riaprire il file edmx. Lavorato.
Rohit

1

Un'altra cosa da considerare se si usa EF Code First è che a volte non crea automaticamente il database di supporto nella classe DbContext. La soluzione è aggiungere la propria stringa di connessione: è possibile utilizzare la stringa di connessione che potrebbe essere presente per gestire il database utente / registrazione che supporta il provider di appartenenza semplice, come modello. Infine, dovrai aggiungere un costruttore predefinito per la classe DbContext che hai creato:

public ChaletDb():base("ChaletConnection")
    {

    }

Qui, il nome della stringa di connessione immesso nel file web.config viene utilizzato per indirizzare DbContext alla creazione del database. Molto occasionalmente, ho dovuto creare manualmente il database (in SQL Server Management Studio) che lo ha spinto a funzionare.


0

Ho più progetti in una soluzione e ho aggiunto EF a ogni progetto in tempi diversi. Su alcune macchine funzionava e su alcune non funzionava con il suddetto errore. Mi ci è voluto un po 'per notare che alcuni dei file app.config del mio progetto avevano questo:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

Questo va bene se usi LocalDb (nuovo tipo "sql express"), ma completamente sbagliato se non hai quel server specifico installato e usi un SQL normale.

Soluzione: rimuovere il codice sopra.


0

Questo perché la connessione al server SQL non è riuscita.

Assicurati che l'account utente con cui stai eseguendo il processo abbia accesso a SQL Server.

Se hai generato il DbContext dal thread padre (come l'utilizzo dell'inserimento delle dipendenze) e quindi se stai impersonando un altro utente, si verificherà questo errore. La soluzione sarebbe generare il DbContext all'interno del nuovo thread o del nuovo contesto di rappresentazione.


0

Ho appena chiuso tutte le istanze di Visual Studio e ho riaperto la mia soluzione.

Non so cosa sia successo veramente, ma ho avuto la stessa soluzione aperta da due diversi spazi di lavoro locali (uno con le mie modifiche locali, uno con il codice sorgente del repository invariato). Lavoro con un DB postgres, Entity Framework 6, Visual Studio 2013 e ASP.NET MVC 5.


0

Ho avuto un errore per Entity Framework, ma nessuna delle risposte precedenti è finita per adattarsi alla soluzione che alla fine ha funzionato.

I miei modelli Code First EntityFramework e DataContext erano in un progetto separato dal mio progetto principale WebAPI. Il mio progetto Entity Framework da qualche parte lungo la linea di codifica è stato impostato come progetto di avvio e quindi quando stavo eseguendo una migrazione ho ricevuto "Il provider non ha restituito una stringa ProviderManifestToken" ... problema di connessione.

Si scopre che poiché ConnectionString al DB si trova nel file Web.config nel progetto WebAPI Main, che quando stavo eseguendo una migrazione la stringa di connessione non veniva recuperata. Impostando il progetto WebAPI come startProject sono stato in grado di connettermi correttamente.

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.